Firebase Data 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 לבצע ניתוח מורפולוגי מדויק של מילים, ויעזור לוודא שהחיפוש לא יפספס תוצאות רלוונטיות. אם מחפשים בכמה עמודות, צריך להגדיר את אותה שפה לכל העמודות.
שפות | ||
---|---|---|
|
|
|
כדי לקבל את הרשימה המלאה באמצעות 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 מתאים לכל המילים, אבל לא בהכרח יחד (למשל, 'כלב חום' יתאים ל'הכלב החום והלבן' או ל'הכלב הלבן והחום').
- PHRASE מתאים לביטוי מדויק (למשל, "brown dog" יתאים ל-"the white and brown dog", אבל לא ל-"brown and white dog").
- מתקדם מאפשר ליצור שאילתות מורכבות באמצעות הסט המלא של אופרטורים של 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
...
}
}
בחירה בין חיפוש טקסט מלא, חיפוש דמיון וקטורי ומסנני תבניות מחרוזות
Data Connect מציע כמה דרכים שונות לחיפוש במסד הנתונים.
הטבלה הבאה יכולה לעזור לכם לבחור את השיטה המתאימה לתרחיש השימוש שלכם.
חיפוש טקסט מלא | חיפוש דמיון וקטורי | מסננים של תבניות מחרוזות |
---|---|---|
מתאים להטמעה של פונקציונליות חיפוש כללית | מתאים למציאת שורות דומות מבחינה סמנטית (לדוגמה, המלצות או 'עוד תוצאות דומות') | מתאים להתאמות מדויקות של טקסט או לחיפושים של ביטויים רגולריים |
מבצעת גזירה לקסיקלית, שעוזרת להתאים צורות שונות או זמנים שונים של אותה מילה | נדרש Vertex AI | השימוש בזיכרון ובנפח הדיסק הוא הכי נמוך, כי לא נדרשים אינדקסים או עמודות שנוצרו |
אפשר לבצע את הפעולה על כמה עמודות בטבלה | אפשר להשתמש בה רק בעמודה אחת בכל פעם | אפשר לבצע את הפעולה על כמה עמודות בטבלה באמצעות מסנני OR |
ביצועים טובים במסמכים גדולים יותר | ביצועים טובים במסמכים גדולים | הביצועים פחות טובים כשמחפשים במסמכים גדולים יותר |
מוסיף תקורה של זיכרון ואחסון כדי לאחסן עמודה שנוצרה ואינדקס לכל חיפוש |