סקירה כללית של חיפוש טקסט מלא

חיפוש טקסט מלא (FTS) מאפשר לכם לזהות מסמכים בשפה טבעית שתואמים לשאילתה. הגישה הזו יעילה יותר מהתאמה רגילה של מחרוזות, כי היא מתחשבת בניואנסים לשוניים, כמו התעלמות ממילים נפוצות כמו 'the' (ה') והתאמה של צורות שונות של מילה, כמו 'run', ‏'running' או 'ran'.

‫AlloyDB ל-PostgreSQL תומך בכל התכונות והיכולות של חיפוש טקסט מלא. בנוסף לתמיכה באינדקסים של GIN ו-GiST,‏ AlloyDB מספק גם את התוסף RUM לחיפוש טקסט מלא בביצועים גבוהים ב-PostgreSQL מגרסה 17 ומטה, ודירוג רלוונטיות של Best Matching 25 (ההתאמה הטובה ביותר 25,‏ BM25) ב-PostgreSQL מגרסה 17 ומעלה.

כדי להטמיע ביעילות חיפוש טקסט מלא (FTS), חשוב להבין איך PostgreSQL מעבד ומחפש טקסט. יחידת החיפוש, מסמך, היא בדרך כלל עמודת טקסט או שילוב של עמודות משורה. תהליך בניית האינדקס מנתח את המסמך הזה כדי לשייך מילים (או לקסמות, צורת הבסיס של מילה) לשורה.

התהליך הזה כולל צינור עיבוד מקדים שממיר טקסט גולמי לפורמט שניתן לחיפוש על ידי:

  • פיצול הטקסט לטוקנים.
  • הסרת מילות עצירה נפוצות.
  • נרמול מילים לצורת השורש שלהן. לדוגמה, run הוא הלקסמה של run,‏ runs,‏ running ו-ran.

כדי להשתמש בחיפוש טקסט מלא, צריך גם ללמוד על סוגי נתונים מיוחדים, על אופרטורים ועל אסטרטגיות שונות של יצירת אינדקסים, כולל אינדקסים מובנים של PostgreSQL ואינדקסים של RUM (ניתוח בזמן אמת של שימוש) עם ביצועים גבוהים.

מערכת PostgreSQL משתמשת בשני סוגי נתונים עיקריים ובאופרטור התאמה כדי לנהל חיפוש טקסט מלא (FTS):

  • tsvector: מייצג מסמך בפורמט שניתן לחיפוש – כרשימה ממוינת של לקסמות ייחודיות.
  • tsquery: מייצג מונחי חיפוש, כולל אופרטורים בוליאניים שמאפשרים לשלב לקסמות.
  • @@: בדיקה אם tsvector תואם ל-tsquery, עם אפשרות לחיפושים שמביאים בחשבון את השפה.

‫AlloyDB תומך בכל סוגי האינדקסים לחיפוש טקסט מלא ש-PostgreSQL מובנה תומך בהם. הבחירה באינדקס תלויה באיזון בין מהירות החיפוש, משך זמן של תהליך build של האינדקס, מהירות העדכון והפונקציות הספציפיות של החיפוש שנדרשות, כמו חיפוש של צירופי מילים או דירוג לפי רלוונטיות.

כדי לשפר את הרלוונטיות והדיוק של החיפוש, אפשר גם לבחור באחת מהאפשרויות הבאות:

  • אינדקס RUM: משפר את אינדקס GIN הרגיל על ידי אחסון מידע מיקומי ישירות באינדקס, ומאפשר לבצע חיפושים מהירים יותר של צירופי מילים ודירוג רלוונטיות בלי לגשת לנתוני הטבלה. התוסף הזה נתמך ב-PostgreSQL מגרסה 17 ומטה. מידע נוסף זמין במאמר בנושא יצירה וניהול של אינדקס RUM.
  • אינדקס BM25: הטמעה של האלגוריתם ההסתברותי Best Matching 25 כדי לדרג מסמכים על סמך תדירות המונחים ורוויית האורך, וכך לספק דיוק בהתאמה למילות מפתח ברמה של תקן בתעשייה. התוסף הזה נתמך ב-PostgreSQL מגרסה 17 ואילך. מידע נוסף זמין במאמר בנושא יצירה וניהול של אינדקס BM25.

הטמעות החיפוש הכי יעילות משלבות לעיתים קרובות חיפוש טקסט מלא באמצעות אינדקסים של RUM וחיפוש וקטורי. כדי למזג את היתרונות של הבנה סמנטית והתאמה מדויקת של מילות מפתח, אפשר להשתמש בחיפוש היברידי. כך אפשר למזג את קבוצות התוצאות השונות כדי לקבל דירוג מקיף.

לדוגמה, באפליקציה למסחר אלקטרוני, אפשר קודם להשתמש בחיפוש טקסט מלא עם RUM כדי למצוא מוצרים שמכילים מילות מפתח ספציפיות כמו "נעלי ריצה", ואז להשתמש בחיפוש וקטורי כדי למצוא תוצאות שמבוססות על דמיון סמנטי לשאילתה מפורטת יותר של משתמש, כמו "נעליים נוחות לאימונים למרחקים ארוכים". לאחר מכן, מסד הנתונים ממזג את התוצאות המדורגות משני רכיבי החיפוש לרשימה מאוחדת אחת באמצעות אלגוריתם של מיזוג דירוגים הדדי (RRF), כדי ליצור דירוג סופי.

מידע נוסף על השימוש בגישה ההיברידית הזו זמין במאמר בנושא הרצת חיפוש היברידי של דמיון בין וקטורים.

המאמרים הבאים