סכימה של Google Cloud Search היא מבנה JSON שמגדיר אובייקטים, מאפיינים ואפשרויות לאינדוקס ולשאילתות של נתונים. מחבר התוכן שלכם משתמש בסכימה הרשומה כדי לבנות את הנתונים במאגר ולבצע עליהם אינדוקס.
כדי ליצור סכימה, צריך לספק אובייקט סכימה בפורמט JSON ל-API. לפני שמבצעים אינדוקס של נתונים, צריך לרשום סכימה לכל מאגר.
במאמר הזה מוסבר על יצירת סכימות. כדי לשפר את חוויית החיפוש, אפשר לעיין במאמר שיפור איכות החיפוש.
יצירה של סכימה
כדי ליצור סכימה של Cloud Search:
- זיהוי התנהגות משתמשים צפויה
- איך מאתחלים מקור נתונים
- הגדרת האובייקטים
- הגדרת מאפייני אובייקט
- רישום הסכימה
- אינדוקס של הנתונים
- בדיקת הסכימה
- התאמה של הסכימה
זיהוי התנהגות משתמשים צפויה
הבנה של אופן החיפוש של המשתמשים עוזרת לכם להגדיר את אסטרטגיית הסכימה. במסד נתונים של סרטים, משתמשים יכולים לחפש "סרטים בכיכובו של רוברט רדפורד". הסכימה צריכה לתמוך בשאילתות לגבי סרטים עם שחקן ספציפי.
כדי להתאים את הסכימה להתנהגות המשתמשים:
- הערכה של שאילתות מגוונות ממשתמשים שונים.
- מזהים מערכי נתונים לוגיים, או אובייקטים, כמו 'סרט'.
- זיהוי מאפיינים (תכונות) כמו שם או תאריך פרסום.
- צריך לציין ערכים תקינים למאפיינים, כמו 'שודדי התיבה'.
- לקבוע את הצרכים של המיון והדירוג, כמו סדר כרונולוגי או דירוג של קהלים.
- זיהוי מאפייני הקשר, כמו תפקיד, כדי לשפר את ההצעות להשלמה אוטומטית.
- מפרטים את האובייקטים, המאפיינים וערכי הדוגמה. אפשר להשתמש ברשימה הזו כדי להגדיר אפשרויות לאופרטורים.
אתחול מקור הנתונים
מקור נתונים מייצג נתונים ממאגר מידע עם אינדקס שמאוחסנים ב-Google Cloud. אפשר לעיין במאמר בנושא ניהול מקורות נתונים של צד שלישי. כשמשתמש לוחץ על תוצאה, Cloud Search מפנה אותו לפריט באמצעות כתובת ה-URL מתוך בקשת ההוספה לאינדקס.
הגדרת האובייקטים
אובייקט הוא היחידה הבסיסית של סכימה. מבנים לוגיים כמו 'סרט' או 'אדם' הם אובייקטים. לכל אובייקט יש מאפיינים כמו שם, משך או כותרת.
סכימה היא רשימה של הגדרות אובייקטים בתג objectDefinitions.
{
"objectDefinitions": [
{ "name": "movie" },
{ "name": "person" }
]
}
צריך להשתמש בשמות ייחודיים לכל אובייקט, כמו movie. שירות הסכימה משתמש בשמות האלה כמפתחות. ObjectDefinition
הגדרת מאפייני אובייקט
מגדירים מאפיינים כמו שם ותאריך פרסום בקטע propertyDefinitions. משתמשים בתווית
options
לfreshnessOptions
(דירוג) ובתווית
displayOptions
(תוויות בממשק המשתמש).
{
"objectDefinitions": [{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": { "operatorName": "title" }
},
"displayOptions": { "displayLabel": "Title" }
},
{
"name": "releaseDate",
"isReturnable": true,
"isSortable": true,
"datePropertyOptions": {
"operatorOptions": {
"operatorName": "released",
"lessThanOperatorName": "releasedbefore",
"greaterThanOperatorName": "releasedafter"
}
}
}
]
}]
}
PropertyDefinition כולל:
- מחרוזת
name. - אפשרויות שלא תלויות בסוג (למשל,
isReturnable). - סוג ואפשרויות ספציפיות לסוג (למשל,
textPropertyOptions). operatorOptionsלאופרטורים של חיפוש.-
displayOptionsלתוויות בממשק המשתמש.
אפשר להשתמש בשמות מאפיינים שוב באובייקטים שונים. לדוגמה, movieTitle יכול להופיע גם באובייקט movie וגם בפילמוגרפיה של אובייקט person.
הוספת אפשרויות שלא תלויות בסוג
PropertyDefinition כולל אפשרויות בוליאניות להגדרת פונקציונליות החיפוש של מאפיין, ללא קשר לסוג שלו. ברירת המחדל של האפשרויות האלה היא false, וצריך להגדיר אותן ל-true כדי להשתמש בהן.
-
isReturnable: מוגדר ל-trueאם נתוני הנכס צריכים להיות מוחזרים בתוצאות החיפוש באמצעות Query API. אפשר להשתמש בנכסים שאי אפשר להחזיר כדי לחפש או לדרג בלי שהם יופיעו בתוצאות. -
isRepeatable: מגדירים את הערךtrueאם למאפיין יכולים להיות כמה ערכים. לדוגמה, לסרט יש תאריך יציאה אחד אבל כמה שחקנים. -
isSortable: מגדירים את הערךtrueאם אפשר להשתמש במאפיין למיון. הערך לא יכול להיותtrueאם הערך שלisRepeatableהואtrueאו אם המאפיין נמצא באובייקט משנה שניתן לחזרה. -
isFacetable: הערךtrueאם אפשר להשתמש במאפיין ליצירת היבטים (מאפיינים שמשמשים לסינון תוצאות החיפוש).- הערך של
isReturnableחייב להיותtrue. - התכונה נתמכת רק בנכסי enum, בוליאניים וטקסט.
- הערך של
-
isWildcardSearchable: אם הערך הואtrue, המשתמשים יכולים לבצע חיפושים עם תו כללי בנכס הזה. האפשרות הזו זמינה רק במאפייני טקסט וההתנהגות שלה תלויה בהגדרה שלexactMatchWithOperator:- אם
exactMatchWithOperatorהואtrue: ערך הטקסט נחשב לטוקן יחיד. שאילתה כמוscience-*תתאים לערךscience-fiction. - אם
exactMatchWithOperatorהואfalse: ערך הטקסט עובר טוקניזציה. שאילתה כמוsci*אוfi*תואמת ל-science-fiction, אבלscience-*לא.
- אם
הגדרת סוג
מגדירים את סוג הנתונים על ידי הגדרת אובייקט האפשרויות המתאים של המאפיין (לדוגמה,
textPropertyOptions). אם אתם יודעים את כל הערכים האפשריים, השתמשו בסוגי נתונים מנומריים (enumPropertyOptions). לנכס יכול להיות רק סוג נתונים אחד.
הגדרת אפשרויות לאופרטור
operatorOptions תארו איך מאפיין מתפקד כאופרטור חיפוש.
לכל operatorOptions צריך להיות operatorName (לדוגמה, title). זהו הפרמטר שהמשתמשים מקלידים בשאילתות (לדוגמה, title:titanic). כדאי להשתמש בשמות אינטואיטיביים ולחשוף אותם למשתמשים.
אפשר לשתף operatorName בין נכסים מאותו סוג. שאילתות
שמשתמשות בשם הזה מאחזרות תוצאות מכל הנכסים התואמים.
מאפיינים שניתן למיין יכולים לכלול את lessThanOperatorName ואת greaterThanOperatorName בשאילתות השוואה. במאפייני טקסט אפשר להשתמש ב-exactMatchWithOperator כדי להתייחס לערך כולו כאל טוקן יחיד.
הוספת אפשרויות תצוגה
המקטע האופציונלי displayOptions מכיל את displayLabel. זוהי תווית ידידותית למשתמש שמוצגת בתוצאות החיפוש.
הוספת אופרטורים לסינון הצעות
משתמשים ב-suggestionFilteringOperators[] כדי להגדיר מאפיין שמסנן הצעות להשלמה אוטומטית (לדוגמה, סינון של הצעות לסרטים לפי הז'אנר המועדף על המשתמש). אפשר להגדיר רק מסנן הצעות אחד.
רישום הסכימה
רושמים את הסכימה בשירות הסכימה באמצעות המזהה של מקור הנתונים. שליחת בקשת UpdateSchema:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
אתם יכולים להשתמש ב-validateOnly: true כדי לבדוק את הסכימה בלי לרשום אותה.
אינדקס של הנתונים
אחרי ההרשמה, מאכלסים את מקור הנתונים באמצעות קריאות ל-Index, בדרך כלל באמצעות מחבר.
דוגמה לבקשה להוספה לאינדקס:
{
"name": "datasource/<data_source_id>/items/titanic",
"metadata": {
"title": "Titanic",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [{
"name": "movieTitle",
"textValues": { "values": ["Titanic"] }
}]
}
},
"itemType": "CONTENT_ITEM"
}
בדיקת הסכימה
לפני שמעבירים את המאגר לסביבת הייצור, כדאי לבדוק אותו עם מאגר קטן. יוצרים ACL שמגביל את התוצאות לחשבון למטרות בדיקה.
- שאילתה כללית: מחפשים מחרוזת (למשל, titanic) כדי לראות את כל הפריטים התואמים.
- שאילתת אופרטור: משתמשים באופרטור (למשל,
actor:Zane) כדי להגביל את התוצאות.
התאמה של הסכימה
עוקבים אחרי המשוב של המשתמשים ומשנים את הסכימה בהתאם. יכול להיות שתצטרכו ליצור אינדקס לשדות חדשים או לשנות את השם של האופרטורים כדי שיהיו אינטואיטיביים יותר.
יצירת אינדקס מחדש אחרי שינוי סכימה
לא צריך ליצור אינדקס מחדש כדי שהשינויים יחולו על:
- שמות האופרטורים.
- מגבלות מספריות.
- דירוג מסודר.
- אפשרויות רענון או תצוגה.
צריך ליצור אינדקס מחדש בשביל:
- הוספה או הסרה של נכסים או אובייקטים.
- החלפת
isReturnable,isFacetableאוisSortableב-true. - סימון נכס
isSuggestable.
שינויים אסורים בנכס
אסור לבצע שינויים שפוגעים באינדקס או שגורמים לתוצאות לא עקביות, כולל:
- שם או סוג הנתונים של הנכס.
- ההגדרות של
exactMatchWithOperatorאוretrievalImportance.
ביצוע שינוי מורכב בסכימה
כדי לבצע שינוי שלא מותר, צריך להעביר נכסים מהגדרה ישנה להגדרה חדשה:
- מוסיפים לנכס החדש שם שונה בסכימה.
- רושמים את הסכימה עם המאפיינים החדשים והישנים.
- מאכלסים מחדש את האינדקס באמצעות הנכס החדש בלבד.
- מוחקים את המאפיין הישן מהסכימה.
- מעדכנים את קוד השאילתה כדי להשתמש בשם הנכס החדש.
Cloud Search מתעד פריטים שנמחקו למשך 30 יום כדי למנוע בעיות בשימוש חוזר.
מגבלות גודל
- אפשר להוסיף עד 10 אובייקטים ברמה העליונה.
- עומק מקסימלי של 10 רמות.
- עד 1,000 שדות לכל אובייקט (כולל שדות מקוננים).
השלבים הבאים
- יוצרים ממשק חיפוש.
- שיפור איכות החיפוש.
- איך מבנים סכימה לפרשנות אופטימלית של שאילתות
- הגדרת מילים נרדפות