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

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

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

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

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

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

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

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

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

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

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

מידע נוסף על יצירה ושימוש באינדקסים של RUM ב-AlloyDB זמין במאמר יצירה וניהול של אינדקס RUM.

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

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

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

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