חיפוש טקסט מלא (FTS) ב-AlloyDB ל-PostgreSQL מאפשר לזהות מסמכים בשפה טבעית שעונים על שאילתה. הגישה הזו יעילה יותר מהתאמת מחרוזות רגילה, כי היא מתחשבת בניואנסים לשוניים, כמו התעלמות ממילות עצירה נפוצות כמו "the" והתאמה של צורות שונות של מילה, כמו "run", "running" או "ran".
בנוסף לאינדקסים הרגילים של PostgreSQL GIN ו-GiST, ב-AlloyDB יש את התוסף rum לחיפוש טקסט מלא עם ביצועים גבוהים בכל הגרסאות של PostgreSQL שנתמכות ב-AlloyDB (גרסה 18 ומעלה של PostgreSQL), ודירוג רלוונטיות של Best Matching 25 (BM25) בגרסה 17 ומעלה של PostgreSQL.
מושגי ליבה של חיפוש טקסט מלא
כדי להטמיע ביעילות חיפוש טקסט מלא (FTS), חשוב להבין איך PostgreSQL מעבד טקסט ומחפש בו. יחידת החיפוש, מסמך, היא בדרך כלל עמודת טקסט או שילוב של עמודות משורה. תהליך יצירת האינדקס מנתח את המסמך הזה כדי לשייך מילים (או לקסמות, צורת הבסיס של מילה) לשורה.
התהליך הזה כולל צינור עיבוד נתונים מקדים, שבו הטקסט הגולמי עובר המרה לפורמט שניתן לחפש בו, באמצעות:
- פירוק הטקסט לטוקנים.
- הסרת מילות עצירה נפוצות.
- נרמול מילים לצורת השורש שלהן. לדוגמה, "ריצה" היא הלקסמה של "ריצה", "ריצות", "רץ" ו "רצה".
כדי להשתמש בחיפוש טקסט מלא, צריך גם ללמוד על סוגי נתונים מיוחדים, אופרטורים ואסטרטגיות שונות של הוספה לאינדקס, כולל אינדקסים מובנים של PostgreSQL ואינדקסים של RUM עם ביצועים גבוהים.
ב-PostgreSQL יש שני סוגי נתונים עיקריים ואופרטור התאמה לניהול FTS:
-
tsvector: מייצג מסמך בפורמט שניתן לחיפוש – כרשימה ממוינת של לקסמות נפרדות. -
tsquery: מייצג מונחי חיפוש, כולל אופרטורים בוליאניים שמאפשרים לשלב לקסמות. -
@@: בודקת אםtsvectorתואם ל-tsquery, ומאפשרת חיפושים עם מודעות לשפה.
AlloyDB תומך בכל סוגי האינדקסים לחיפוש טקסט מלא שנתמכים ב-PostgreSQL המובנה. הבחירה באינדקס תלויה באיזון בין מהירות החיפוש, זמן בניית האינדקס, מהירות העדכון והפונקציות הספציפיות של החיפוש שנדרשות, כמו חיפוש ביטויים או דירוג רלוונטיות.
כדי לשפר את הרלוונטיות והדיוק של החיפוש, אתם יכולים גם לבחור בין האפשרויות הבאות:
- אינדקס RUM: משפר את אינדקסי ה-GIN הרגילים על ידי אחסון מידע על מיקום ישירות באינדקס, וכך מאפשר לבצע חיפושי ביטויים ודירוג רלוונטיות מהירים יותר בלי לגשת לנתוני הטבלה. התוסף הזה נתמך בכל הגרסאות של PostgreSQL שנתמכות ב-AlloyDB (גרסה 18 של PostgreSQL וגרסאות קודמות). מידע נוסף זמין במאמר יצירה וניהול של אינדקס RUM.
- אינדקס BM25: מיישם את האלגוריתם ההסתברותי Best Matching 25 כדי לדרג מסמכים על סמך תדירות המונחים ורוויית האורך, ומספק דיוק בהתאמה למילות מפתח לפי הסטנדרטים המקובלים בתחום. התוסף הזה נתמך ב-PostgreSQL מגרסה 17 ואילך. מידע נוסף זמין במאמר יצירה וניהול של אינדקס BM25.
שילוב של חיפוש סמנטי וחיפוש בטקסט מלא
ההטמעות הכי יעילות של חיפוש משלבות בדרך כלל חיפוש טקסט מלא באמצעות אינדקסים של RUM וחיפוש וקטורי. חיפוש היברידי משלב את היתרונות של הבנה סמנטית והתאמה מדויקת למילות מפתח, וממזג את קבוצות התוצאות השונות לדירוג מקיף.
לדוגמה, באפליקציית מסחר אלקטרוני, אפשר קודם להשתמש בחיפוש טקסט מלא עם RUM כדי למצוא מוצרים שמכילים מילות מפתח ספציפיות כמו "נעלי ריצה", ואז להשתמש בחיפוש וקטורי כדי למצוא תוצאות על סמך דמיון סמנטי לשאילתה מפורטת יותר של משתמש, כמו "נעליים נוחות לאימונים למרחקים ארוכים". לאחר מכן, מסד הנתונים ממזג את התוצאות המדורגות משני רכיבי החיפוש לרשימה אחת מאוחדת באמצעות אלגוריתם Reciprocal Rank Fusion (RRF) כדי ליצור דירוג סופי.
מידע נוסף על השימוש בגישה ההיברידית הזו זמין במאמר הרצת חיפוש היברידי של דמיון וקטורי.
המאמרים הבאים
- איך יוצרים אינדקס RUM ושולחים אליו שאילתות
- איך יוצרים ומנהלים אינדקס BM25
- איך מריצים חיפוש היברידי של דמיון בין וקטורים