Firebase SQL Connect תומך בחיפוש טקסט מלא, שמבוסס על PostgreSQL. חיפוש טקסט מלא מאפשר לכם לאתר מידע במהירות וביעילות בתוך מערכי נתונים גדולים, על ידי חיפוש של מילות מפתח וביטויים בכמה עמודות בו-זמנית.
אפשר להוסיף לשירות חיפוש טקסט מלא. קודם מוסיפים את ההנחיה @searchable
ל-String בסכימה שרוצים לחפש בה. לדוגמה:
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
אחרי שמוסיפים את ההנחיה הזו, אפשר לבצע חיפוש טקסט מלא על ידי הוספת השדה <pluralType>_search לשאילתה. במקרה הזה, זה יהיה movies_search:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
שיפור תוצאות חיפוש טקסט מלא
אפשר לשפר את תוצאות החיפוש בטקסט מלא על ידי הוספת ארגומנטים להנחיה @searchable ולשדה _search.
ארגומנטים משותפים
אפשר לשלוט בתוצאות החיפוש באמצעות הרבה מאותם ארגומנטים שמשמשים לשדות בסיסיים של רשימות <pluralType>:
orderמאפשר לשנות את סדר התוצאות. אם לא מציינים ערך, התוצאות ממוינות לפי רלוונטיות בסדר יורד.whereמאפשר להוסיף מסננים נוספים לחיפוש (לדוגמה, חיפוש רק של סרטים מז'אנר מסוים).-
limitגורם לכך שהשאילתה תחזיר רק את X התוצאות המובילות. -
offsetגורם לכך שהשאילתה תדלג על X התוצאות הראשונות. -
distinctמוסיף את האופרטור DISTINCT ל-SQL שנוצר.
בחירת שפה
כברירת מחדל, חיפוש הטקסט המלא מנתח מסמכים באנגלית. אפשר לשנות את זה באמצעות ארגומנט השפה בהוראת @searchable:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
הגדרת השפה הנכונה תאפשר ל-PostgreSQL לבצע ניתוח מורפולוגי מדויק של מילים, ותעזור לוודא שהחיפוש לא יפספס תוצאות רלוונטיות. אם מחפשים בכמה עמודות, צריך להגדיר את כולן לאותה שפה.
| שפות | ||
|---|---|---|
|
|
|
אנחנו תומכים בכל השפות שנתמכות בחיפוש טקסט מלא ב-PostgreSQL. כדי לקבל את הרשימה המלאה באמצעות psql, אפשר להשתמש בשאילתה הבאה.
SELECT cfgname FROM pg_ts_config;
פורמט השאילתה
כברירת מחדל, חיפוש הטקסט המלא משתמש בסמנטיקה של האינטרנט לשאילתות (בדומה לחיפוש Google). אפשר לשנות את ההתנהגות הזו באמצעות הארגומנט queryFormat בשדה <pluralType>_search.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
יש ארבע אפשרויות לפורמט של שאילתות:
- QUERY מספק סמנטיקה מוכרת למנועי חיפוש באינטרנט (למשל, מחרוזות במירכאות, AND ו-OR). זוהי הגדרת ברירת המחדל.
- PLAIN תואם לכל המילים, אבל לא בהכרח ברצף ("brown dog" יתאים ל-" the brown and white dog" או ל-"the white and brown dog").
- PHRASE מתאימה לביטוי מדויק ( 'כלב חום' יתאים ל-'הכלב הלבן והחום', אבל לא ל-'כלב חום ולבן').
- מתקדם מאפשר ליצור שאילתות מורכבות באמצעות הסט המלא של אופרטורים של tsquery.
סף הרלוונטיות
הגדרת סף רלוונטיות פירושה שהחיפוש יחזיר רק תוצאות שערך הרלוונטיות שלהן גבוה מערך מסוים. ברוב המקרים לא צריך להגדיר את זה – כל תוצאה עם רלוונטיות גדולה מ-0 תהיה תוצאה רלוונטית.
עם זאת, אם החיפוש מחזיר תוצאות שלא נראות רלוונטיות, אפשר להשתמש בסף הרלוונטיות כדי לסנן אותן.
כדי להבין מהו ערך הסף המתאים לרלוונטיות, כדאי לבצע כמה חיפושי בדיקה ולבדוק את _metadata.relevance:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
בוחרים סף שגורם להשמטת תוצאות שלדעתכם לא רלוונטיות. כדי לעשות את זה:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
בחירה בין חיפוש טקסט מלא, חיפוש דמיון וקטורי ומסנני תבניות מחרוזות
SQL Connect מציע כמה דרכים שונות לחיפוש במסד הנתונים.
הטבלה הזו תעזור לכם לבחור את האפשרות המתאימה לתרחיש השימוש שלכם.
| חיפוש בכל הטקסט | חיפוש דמיון וקטורי | מסננים של תבניות מחרוזות |
|---|---|---|
| מתאים להטמעה של פונקציונליות חיפוש כללית | מתאים למציאת שורות דומות מבחינה סמנטית (לדוגמה, המלצות או 'עוד תוצאות דומות') | מתאים לחיפושים של התאמות מדויקות לטקסט או לביטויים רגולריים |
| ביצוע stemming לקסיקלי, שעוזר להתאים צורות שונות או זמנים שונים של אותה מילה | נדרש Vertex AI | השימוש בזיכרון ובנפח הדיסק הוא הכי נמוך, כי לא נדרשים אינדקסים או עמודות שנוצרו |
| אפשר לבצע את הפעולה על כמה עמודות בטבלה | אפשר להשתמש בה רק בעמודה אחת בכל פעם | אפשר לבצע את הפעולה על כמה עמודות בטבלה באמצעות מסנני OR |
| ביצועים טובים יותר במסמכים גדולים יותר | ביצועים טובים במסמכים גדולים | הביצועים פחות טובים כשמחפשים במסמכים גדולים יותר |
| מוסיף תקורה של זיכרון ואחסון כדי לאחסן עמודה שנוצרה ואינדקס לכל חיפוש |