הסכימה של Google Cloud Search היא מבנה JSON שמגדיר את האובייקטים, המאפיינים והאפשרויות שישמשו להוספה של הנתונים לאינדקס ולהפעלת שאילתות עליהם. מחבר התוכן קורא נתונים מהמאגר, ומבנה את הנתונים ומוסיף אותם לאינדקס על סמך הסכימה הרשומה.
כדי ליצור סכימה, מספקים ל-API אובייקט של סכימה בפורמט JSON ולאחר מכן רושמים אותו. כדי שתוכלו להוסיף את הנתונים לאינדקס, עליכם לרשום אובייקט סכימה לכל אחד מהמאגרים.
במסמך הזה נסביר את העקרונות הבסיסיים של יצירת סכימות. במאמר שיפור איכות החיפוש מוסבר איך לשפר את הסכימה כדי לשפר את חוויית החיפוש.
יצירה של סכימה
לפניכם רשימת השלבים ליצירת הסכימה של Cloud Search:
- זיהוי התנהגות המשתמשים הצפויה
- איך מאתחלים מקור נתונים
- יצירת סכימה
- סכימה מלאה לדוגמה
- רישום הסכימה
- הוספת הנתונים לאינדקס
- בדיקת הסכימה
- התאמת הסכימה
זיהוי התנהגות המשתמשים הצפויה
תחזית של סוגי השאילתות שהמשתמשים שלכם שולחים תעזור לכם לקבוע את האסטרטגיה ליצירת הסכימה.
לדוגמה, כששולחים שאילתות למסד נתונים של סרטים, אפשר לצפות שהמשתמשים ישלחו שאילתה כמו "הצגת כל הסרטים שבהם מככב רוברט רדפורד". לכן, הסכימה צריכה לתמוך בתוצאות של שאילתות שמבוססות על 'כל הסרטים עם שחקן ספציפי'.
כדי להגדיר את הסכימה כך שישקפו את דפוסי ההתנהגות של המשתמשים, כדאי לבצע את המשימות הבאות:
- הערכה של קבוצה מגוונת של שאילתות רצויות ממשתמשים שונים.
- מזהים את האובייקטים שעשויים לשמש בשאילתות. אובייקטים הם קבוצות לוגיות של נתונים קשורים, כמו סרט במסד נתונים של סרטים.
- זיהוי המאפיינים והערכים שמרכיבים את האובייקט ויכולים לשמש בשאילתות. מאפיינים הם המאפיינים של האובייקט שאפשר להוסיף לאינדקס. הם יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים. לדוגמה, לאובייקט של סרט יכולים להיות נכסים כמו שם הסרט ותאריך הפרסום שלו כערכים פרימיטיביים. אובייקט הסרט עשוי להכיל גם אובייקטים אחרים, כמו שחקנים, שיש להם מאפיינים משלהם, כמו השם או התפקיד שלהם.
- זיהוי דוגמאות לערכים חוקיים למאפיינים. ערכים הם הנתונים בפועל שנוספו לאינדקס של נכס. לדוגמה, שם של סרט אחד במסד הנתונים יכול להיות "שודדי הארץ האבודה".
- כדאי לקבוע אילו אפשרויות מיון ודירוג המשתמשים שלכם יעדיפו. לדוגמה, כשמשתמשים שולחים שאילתה לגבי סרטים, יכול להיות שהם רוצים למיין לפי כרונולוגיה ולדרג לפי דירוג הצופים, ולא צריכים למיין לפי סדר אלפביתי לפי שם.
- (אופציונלי) כדאי לבדוק אם אחד מהנכסים מייצג הקשר ספציפי יותר שבו יכולות להתבצע חיפושים, כמו תפקיד או מחלקה של המשתמשים, כדי שניתן יהיה לספק הצעות להשלמה אוטומטית על סמך ההקשר. לדוגמה, אנשים שמחפשים במסד נתונים של סרטים עשויים להתעניין רק בז'אנר מסוים של סרטים. המשתמשים יוכלו להגדיר את הז'אנר שהם רוצים שהחיפושים שלהם יחזירו, אולי כחלק מפרופיל המשתמש שלהם. לאחר מכן, כשהמשתמש מתחיל להקליד שאילתה לגבי סרטים, רק סרטים בז'אנר המועדף עליו, כמו 'סרטי פעולה', יוצגו כחלק מההצעות להשלמה אוטומטית.
- עליכם ליצור רשימה של האובייקטים, המאפיינים והערכים לדוגמה האלה שאפשר להשתמש בהם בחיפושים. (פרטים על אופן השימוש ברשימה הזו מופיעים בקטע הגדרת אפשרויות של אופרטורים).
איך מאתחלים את מקור הנתונים
מקור נתונים מייצג את הנתונים מהמאגר שנוספו לאינדקס ונשמרו ב-Google Cloud. הוראות להפעלת מקור נתונים מפורטות במאמר ניהול מקורות נתונים של צד שלישי.
תוצאות החיפוש של המשתמש מוחזרות ממקור הנתונים. כשמשתמש לוחץ על תוצאת חיפוש, Cloud Search מפנה אותו לפריט בפועל באמצעות כתובת ה-URL שצוינה בבקשה להוספה לאינדקס.
הגדרת האובייקטים
היחידה הבסיסית של נתונים בסכימה היא אובייקט, שנקרא גם אובייקט סכימה, שהוא מבנה לוגי של נתונים. במסד נתונים של סרטים, מבנה לוגי אחד של נתונים הוא 'movie'. אובייקט אחר יכול להיות 'אדם' כדי לייצג את השחקנים והצוות שהיו מעורבים בסרט.
לכל אובייקט בסכמה יש סדרה של מאפיינים או מאפיינים שמתארים את האובייקט, כמו השם והמשך של סרט או השם ותאריך הלידה של אדם. המאפיינים של אובייקט יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים.
באיור 1 מוצגים אובייקטי הסרט והאדם והמאפיינים המשויכים.
סכימה של Cloud Search היא למעשה רשימה של הצהרות לגבי הגדרת אובייקטים שמוגדרות בתג objectDefinitions
. קטע הקוד הבא של הסכימה מציג את הצהרות ה-objectDefinitions
לאובייקטים של הסכימה movie ו-person.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
כשמגדירים אובייקט סכימה, צריך לספק לו name
שצריך להיות ייחודי מבין כל האובייקטים האחרים בסכימה. בדרך כלל משתמשים בערך name
שמתאר את האובייקט, למשל movie
לאובייקט של סרט. שירות הסכימה משתמש בשדה name
כמזהה מפתח לאובייקטים שאפשר להוסיף לאינדקס. למידע נוסף על השדה name
, אפשר לעיין במאמר הגדרת אובייקט.
הגדרת מאפייני אובייקטים
כפי שמפורט במסמך העזרה של ObjectDefinition, אחרי שם האובייקט מופיעה קבוצה של options
ורשימת propertyDefinitions
.
השדה options
יכול לכלול גם את השדות freshnessOptions
ו-displayOptions
.
השדה freshnessOptions
משמש להתאמת דירוג החיפוש על סמך עדכניות הפריט. המאפיינים displayOptions
משמשים להגדרה אם תוויות ומאפיינים ספציפיים יוצגו בתוצאות החיפוש של אובייקט.
בקטע propertyDefinitions
מגדירים את המאפיינים של אובייקט, כמו שם הסרט ותאריך היציאה לאקרנים.
בקטע הקוד הבא מוצג האובייקט movie
עם שני מאפיינים: movieTitle
ו-releaseDate
.
{
"objectDefinitions": [
{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": 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"
}
},
"displayOptions": {
"displayLabel": "Release date"
}
...
]
}
]
}
האובייקט PropertyDefinition מורכב מהפריטים הבאים:
- מחרוזת
name
. - רשימה של אפשרויות ללא קשר לסוג, כמו
isReturnable
בקטע הקוד הקודם. - סוג והאפשרויות הספציפיות לסוג, כמו
textPropertyOptions
ו-retrievalImportance
בקטע הקודם. operatorOptions
שמתאר את אופן השימוש במאפיין כאופרטור חיפוש.displayOptions
אחד או יותר, כמוdisplayLabel
בקטע הקוד הקודם.
השם name
של נכס חייב להיות ייחודי בתוך האובייקט המכיל, אבל אפשר להשתמש באותו שם באובייקטים אחרים ובאובייקטים משנה.
באיור 1, שם הסרט ותאריך הפרסום שלו מוגדרים פעמיים: פעם אחת באובייקט movie
ופעם נוספת באובייקט המשנה filmography
של האובייקט person
. בסכימה הזו נעשה שימוש חוזר בשדה movieTitle
כדי שהסכימה תוכל לתמוך בשני סוגים של התנהגויות חיפוש:
- הצגת תוצאות של סרטים כשמשתמשים מחפשים את שם הסרט.
- להציג תוצאות של אנשים כשמשתמשים מחפשים את שם הסרט שבו שחקן מסוים שיחק.
באופן דומה, הסכימה משתמשת שוב בשדה releaseDate
כי יש לו אותו משמעות בשני השדות movieTitle
.
כשאתם מפתחים סכימה משלכם, כדאי לחשוב על שדות קשורים שעשויים להיות במאגר, שמכילים נתונים שאתם רוצים להצהיר עליהם יותר מפעם אחת בסכימה.
הוספת אפשרויות ללא תלות בסוג
ב-PropertyDefinition מפורטות אפשרויות כלליות של פונקציונליות חיפוש שקיימות בכל הנכסים, ללא קשר לסוג הנתונים.
isReturnable
– מציין אם הנכס מזהה נתונים שצריך להחזיר בתוצאות החיפוש דרך Query API. אפשר להחזיר את כל נכסי הסרטים לדוגמה. אפשר להשתמש בנכסים שלא ניתן להחזיר כדי לחפש תוצאות או לדרג אותן, בלי להחזיר אותם למשתמש.isRepeatable
– מציין אם מותר להזין כמה ערכים למאפיין. לדוגמה, לסרט יש רק תאריך יציאה אחד, אבל יכולים להיות בו כמה שחקנים.isSortable
– מציין שאפשר להשתמש במאפיין למטרות מיון. הדבר לא יכול להיות נכון לגבי נכסים שניתן לחזור עליהם. לדוגמה, תוצאות של סרטים יכולות להיות ממוינות לפי תאריך פרסום או לפי סיווג גיל.isFacetable
– מציין שאפשר להשתמש במאפיין ליצירת היבטים. פנים משמש לצמצום תוצאות החיפוש. המשתמש רואה את התוצאות הראשוניות ואז מוסיף קריטריונים או פנים כדי לצמצם את התוצאות עוד יותר. אי אפשר להגדיר את האפשרות הזו כנכונה למאפיינים שהסוג שלהם הוא אובייקט, וגם הערך שלisReturnable
חייב להיות נכון. לבסוף, האפשרות הזו נתמכת רק בנכסי enum, בנכסים בוליאניים ובנכסי טקסט. לדוגמה, אפשר להגדיר את השדותgenre
,actorName
,userRating
ו-mpaaRating
כטבלאות פנים (facetable) כדי שאפשר יהיה להשתמש בהם לצמצום אינטראקטיבי של תוצאות החיפוש.- הערך
isWildcardSearchable
מציין שהמשתמשים יכולים לבצע חיפוש באמצעות תווים כלליים בנכס הזה. האפשרות הזו זמינה רק בנכסי טקסט. האופן שבו חיפוש באמצעות תווים כלליים פועל בשדה הטקסט תלוי בערך שמוגדר בשדה exactMatchWithOperator. אם הערך שלexactMatchWithOperator
מוגדר כ-true
, ערך הטקסט מומר לאסימונים כערך אטומי אחד ומתבצע חיפוש תו כללי לחיפוש (wildcard) נגדו. לדוגמה, אם ערך הטקסט הואscience-fiction
, שאילתת תו כללי לחיפושscience-*
תואמת לו. אםexactMatchWithOperator
מוגדר ל-false
, ערך הטקסט מומר לאסימונים ומתבצע חיפוש תו כללי לכל אסימון. לדוגמה, אם ערך הטקסט הוא 'science-fiction', שאילתות התו הכלליsci*
אוfi*
תואמות לפריט, אבלscience-*
לא תואמת לו.
כל הפרמטרים האלה של פונקציונליות החיפוש הכללית הם ערכים בוליאניים. ערך ברירת המחדל של כולם הוא false
, וצריך להגדיר אותם לערך true
כדי להשתמש בהם.
בטבלה הבאה מוצגים הפרמטרים הבוליאניים שמוגדרים ל-true
לכל המאפיינים של האובייקט movie
:
נכס | isReturnable |
isRepeatable |
isSortable |
isFacetable |
isWildcardSearchable |
---|---|---|---|---|---|
movieTitle |
TRUE | TRUE | |||
releaseDate |
TRUE | TRUE | |||
genre |
TRUE | TRUE | TRUE | ||
duration |
TRUE | ||||
actorName |
TRUE | TRUE | TRUE | TRUE | |
userRating |
TRUE | TRUE | |||
mpaaRating |
TRUE | TRUE |
גם ב-genre
וגם ב-actorName
, הערך של isRepeatable
מוגדר כ-true
כי סרט יכול להשתייך ליותר מז'אנר אחד ובדרך כלל יש בו יותר משחקן אחד. אי אפשר למיין נכס אם הוא ניתן לחזור עליו או אם הוא נכלל באובייקט משנה שניתן לחזור עליו.
הגדרת סוג
בקטע העזרה של PropertyDefinition מפורטים כמה xxPropertyOptions
שבהם xx
הוא סוג ספציפי, כמו boolean
. כדי להגדיר את סוג הנתונים של המאפיין, צריך להגדיר את אובייקט סוג הנתונים המתאים. הגדרת אובייקט של סוג נתונים למאפיין מגדירה את סוג הנתונים של אותו מאפיין. לדוגמה, הגדרת הערך textPropertyOptions
לנכס movieTitle
מציינת שהכותרת של הסרט היא מסוג טקסט. בקטע הקוד הבא מוצג המאפיין movieTitle
עם textPropertyOptions
שמגדיר את סוג הנתונים.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
לכל נכס יכול להיות רק סוג נתונים אחד משויך. לדוגמה, בסכימה של הסרטים, השדה releaseDate
יכול להכיל רק תאריך (למשל, 2016-01-13
) או מחרוזת (למשל, January 13, 2016
), אבל לא את שתיהן.
אלה אובייקטים של סוגי נתונים שמשמשים לציון סוגי הנתונים של המאפיינים בהסכימה לדוגמה של הסרט:
נכס | אובייקט של סוג נתונים |
---|---|
movieTitle |
textPropertyOptions |
releaseDate |
datePropertyOptions |
genre |
enumPropertyOptions |
duration |
textPropertyOptions |
actorName |
textPropertyOptions |
userRating |
integerPropertyOptions |
mpaaRating |
textPropertyOptions |
סוג הנתונים שבוחרים לנכס תלוי בתרחישי השימוש הצפויים.
בתרחיש הדמיוני של הסכימה הזו של סרטים, המשתמשים צפויים לרצות למיין את התוצאות לפי כרונולוגיה, ולכן releaseDate
הוא אובייקט תאריך.
לדוגמה, אם יש תרחיש לדוגמה שבו רוצים להשוות בין גרסאות שפורסמו בדצמבר בשנים שונות לבין גרסאות שפורסמו בינואר, פורמט מחרוזת יכול להיות שימושי.
הגדרת אפשרויות ספציפיות לסוג
בקטע העזרה PropertyDefinition יש קישורים לאפשרויות לכל סוג. רוב האפשרויות הספציפיות לסוג הן אופציונליות, מלבד הרשימה של possibleValues
בקטע enumPropertyOptions
. בנוסף, האפשרות orderedRanking
מאפשרת לדרג ערכים ביחס זה לזה. קטע הקוד הבא מציג את המאפיין movieTitle
עם textPropertyOptions
שמגדיר את סוג הנתונים ועם האפשרות הספציפית לסוג retrievalImportance
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
אלה האפשרויות הנוספות שספציפיות לסוגים שנעשה בהם שימוש בסכימה לדוגמה:
נכס | סוג | אפשרויות ספציפיות לסוג |
---|---|---|
movieTitle |
textPropertyOptions |
retrievalImportance |
releaseDate |
datePropertyOptions |
|
genre |
enumPropertyOptions |
|
duration |
textPropertyOptions |
|
actorName |
textPropertyOptions |
|
userRating |
integerPropertyOptions |
orderedRanking , maximumValue |
mpaaRating |
textPropertyOptions |
הגדרת אפשרויות של אופרטורים
בנוסף לאפשרויות ספציפיות לסוג, לכל סוג יש קבוצה של אפשרויות operatorOptions
אופציונליות. האפשרויות האלה מתארות את אופן השימוש במאפיין כאופרטור חיפוש. בקטע הקוד הבא מוצג הנכס movieTitle
עם ההגדרה textPropertyOptions
של סוג הנתונים, ועם האפשרויות הספציפיות לסוג retrievalImportance
ו-operatorOptions
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
לכל operatorOptions
יש operatorName
, למשל title
ל-movieTitle
. שם המפעיל הוא אופרטור החיפוש של הנכס. אופרטור חיפוש הוא הפרמטר בפועל שבו אתם מצפים שהמשתמשים ישתמשו כדי לצמצם את החיפוש. לדוגמה, כדי לחפש סרטים לפי השם שלהם, המשתמש צריך להקליד title:movieName
, כאשר movieName
הוא שם הסרט.
שמות המפעילים לא חייבים להיות זהים לשם הנכס. במקום זאת, כדאי להשתמש בשמות של אופרטורים שמשקפים את המילים הנפוצות ביותר שבהן משתמשים בארגון. לדוגמה, אם המשתמשים מעדיפים את המונח 'name' במקום 'title' לשם סרט, צריך להגדיר את שם המפעיל כ-'name'.
אפשר להשתמש באותו שם אופרטור בכמה נכסים, כל עוד כל הנכסים מנותבים לאותו סוג. כשמשתמשים בשם אופרטור משותף במהלך שאילתת חיפוש, כל הנכסים שמשתמשים בשם האופרטור הזה מאוחזרים. לדוגמה, נניח שלאובייקט הסרט היו המאפיינים plotSummary
ו-plotSynopsis
, ושלכל אחד מהמאפיינים האלה היה operatorName
של plot
. כל עוד שני המאפיינים האלה הם טקסט (textPropertyOptions
), שאילתה אחת עם אופרטור החיפוש plot
תשחזר את שניהם.
בנוסף ל-operatorName
, נכסים שאפשר למיין אותם יכולים לכלול את השדות lessThanOperatorName
ו-greaterThanOperatorName
ב-operatorOptions
.
המשתמשים יכולים להשתמש באפשרויות האלה כדי ליצור שאילתות שמבוססות על השוואות לערך שנשלח.
לבסוף, ל-textOperatorOptions
יש שדה exactMatchWithOperator
ב-operatorOptions
. אם מגדירים את exactMatchWithOperator
כ-true
, מחרוזת השאילתה חייבת להתאים לערך המלא של המאפיין, ולא רק להופיע בטקסט.
הערך של הטקסט ייחשב כערך אטומי אחד בחיפושים של אופרטורים ובהתאמות של מאפיינים.
לדוגמה, כדאי להוסיף לאינדקס אובייקטים מסוג 'ספר' או 'סרט' עם מאפייני ז'אנר.
דוגמאות לז'אנרים: 'מדע בדיוני', 'מדע' ו'בדיוני'. אם הערך של exactMatchWithOperator
מוגדר כ-false
או מושמט, חיפוש ז'אנר או בחירה בפן 'מדע' או 'בדיוני' יחזירו גם תוצאות עבור 'מדע בדיוני', כי הטקסט מחולק לאסימונים והאסימונים 'מדע' ו'בדיוני' קיימים ב'מדע בדיוני'.
כש-exactMatchWithOperator
הוא true
, הטקסט מטופל כאסימון יחיד, כך שגם 'מדע' וגם 'בדיוני' לא תואמים ל'מדע בדיוני'.
(אופציונלי) מוסיפים את הקטע displayOptions
יש קטע displayOptions
אופציונלי בסוף כל קטע propertyDefinition
. הקטע הזה מכיל מחרוזת displayLabel
אחת.
השדה displayLabel
הוא תווית טקסט מומלצת ונוחה למשתמש למאפיין. אם הנכס מוגדר לתצוגה באמצעות ObjectDisplayOptions, התווית הזו תוצג לפני הנכס. אם הנכס מוגדר לתצוגה ו-displayLabel
לא מוגדר, יוצג רק ערך הנכס.
בקטע הקוד הבא מוצג המאפיין movieTitle
עם displayLabel
שהוגדר לערך 'Title'.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
בהמשך מפורטים ערכי displayLabel
לכל המאפיינים של אובייקט movie
בסכימה לדוגמה:
נכס | displayLabel |
---|---|
movieTitle |
Title |
releaseDate |
Release date |
genre |
Genre |
duration |
Run length |
actorName |
Actor |
userRating |
Audience score |
mpaaRating |
MPAA rating |
(אופציונלי) מוסיפים את הקטע suggestionFilteringOperators[]
יש קטע suggestionFilteringOperators[]
אופציונלי בסוף כל קטע propertyDefinition
. בקטע הזה מגדירים מאפיין שמשמש לסינון ההצעות להשלמה אוטומטית. לדוגמה, אפשר להגדיר את האופרטור של genre
כדי לסנן הצעות על סמך ז'אנר הסרטים המועדף על המשתמש. לאחר מכן, כשהמשתמש מקליד את שאילתת החיפוש, רק הסרטים שתואמים לז'אנר המועדף עליו מוצגים כחלק מהצעות ההשלמה האוטומטית.
רישום הסכימה
כדי לקבל נתונים מובְנים מהשאילתות של Cloud Search, צריך לרשום את הסכימה בשירות הסכימה של Cloud Search. כדי לרשום סכמה, צריך את מזהה מקור הנתונים שקיבלתם בשלב הפעלת מקור נתונים.
באמצעות מזהה מקור הנתונים, שולחים בקשה מסוג UpdateSchema כדי לרשום את הסכימה.
כפי שמפורט בדף העזרה UpdateSchema, שולחים את בקשת ה-HTTP הבאה כדי לרשום את הסכימה:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
גוף הבקשה צריך לכלול את הפרטים הבאים:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
אפשר להשתמש באפשרות validateOnly
כדי לבדוק את תקינות הסכימה בלי לרשום אותה בפועל.
הוספת הנתונים לאינדקס
אחרי שהסכימת תירשם, תוכלו לאכלס את מקור הנתונים באמצעות קריאות ל-Index. בדרך כלל, ההוספה לאינדקס מתבצעת במחבר התוכן.
באמצעות הסכימה של הסרט, בקשת הוספה לאינדקס של API ל-REST לסרט אחד תיראה כך:
{
"name": "datasource/<data_source_id>/items/titanic",
"acl": {
"readers": [
{
"gsuitePrincipal": {
"gsuiteDomain": true
}
}
]
},
"metadata": {
"title": "Titanic",
"sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [
{
"name": "movieTitle",
"textValues": {
"values": [
"Titanic"
]
}
},
{
"name": "releaseDate",
"dateValues": {
"values": [
{
"year": 1997,
"month": 12,
"day": 19
}
]
}
},
{
"name": "actorName",
"textValues": {
"values": [
"Leonardo DiCaprio",
"Kate Winslet",
"Billy Zane"
]
}
},
{
"name": "genre",
"enumValues": {
"values": [
"Drama",
"Action"
]
}
},
{
"name": "userRating",
"integerValues": {
"values": [
8
]
}
},
{
"name": "mpaaRating",
"textValues": {
"values": [
"PG-13"
]
}
},
{
"name": "duration",
"textValues": {
"values": [
"3 h 14 min"
]
}
}
]
}
},
"content": {
"inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
"contentFormat": "TEXT"
},
"version": "01",
"itemType": "CONTENT_ITEM"
}
שימו לב שהערך של movie
בשדה objectType
תואם לשם של הגדרת האובייקט בסכימה. ההתאמה בין שני הערכים האלה מאפשרת ל-Cloud Search לדעת באיזה אובייקט הסכימה להשתמש במהלך ההוספה לאינדקס.
שימו לב גם לאופן שבו ההוספה של מאפיין הסכימה releaseDate
לאינדקס מתבססת על מאפייני המשנה של year
, month
ו-day
, שהם עוברים בירושה כי הוא מוגדר כסוג נתונים date
באמצעות השימוש ב-datePropertyOptions
להגדרה שלו.
עם זאת, מאחר שהמאפיינים year
, month
ו-day
לא מוגדרים בהסכימה, אי אפשר להריץ שאילתות לגבי אחד מהמאפיינים האלה (למשל, year
) בנפרד.
שימו לב גם לאופן שבו המאפיין הניתן לחזור עליו actorName
מתווסף לאינדקס באמצעות רשימה של ערכים.
זיהוי בעיות אפשריות בהוספה לאינדקס
שתי הבעיות הנפוצות ביותר שקשורות לסכמות ולהוספה לאינדקס הן:
בקשת ההוספה לאינדקס מכילה שם של נכס או אובייקט סכימה שלא נרשמו בשירות הסכימה. הבעיה הזו גורמת לכך שהמערכת תתעלם מהנכס או מהאובייקט.
בבקשת ההוספה לאינדקס יש מאפיין עם ערך טיפוס שונה מהטיפוס שמופיע בסכימה. הבעיה הזו גורמת ל-Cloud Search להחזיר שגיאה בזמן ההוספה לאינדקס.
בדיקת הסכימה עם כמה סוגי שאילתות
לפני שמירת הסכימה במאגר גדול של נתוני ייצור, מומלץ לבדוק אותה במאגר קטן יותר של נתוני בדיקה. בדיקה במאגר בדיקה קטן יותר מאפשרת לבצע שינויים במהירות בסכימה ולמחוק את הנתונים שנוספו לאינדקס, בלי להשפיע על אינדקס גדול יותר או על אינדקס קיים בסביבת הייצור. במאגר נתוני בדיקה, יוצרים רשימת ACL שמעניקה הרשאה רק למשתמש בדיקה, כדי שמשתמשים אחרים לא יראו את הנתונים האלה בתוצאות החיפוש.
כדי ליצור ממשק חיפוש לאימות שאילתות חיפוש, אפשר לעיין במאמר ממשק החיפוש.
בקטע הזה מפורטות כמה שאילתות לדוגמה שאפשר להשתמש בהן כדי לבדוק הסכימה של סרט.
בדיקה באמצעות שאילתה כללית
שאילתה גנרית מחזירה את כל הפריטים במקור הנתונים שמכילים מחרוזת ספציפית. באמצעות ממשק חיפוש, אפשר להריץ שאילתה גנרית על מקור נתונים של סרט על ידי הקלדה של המילה "titanic" והקשה על Enter. כל הסרטים שכוללים את המילה 'טיטאניק' אמורים להופיע בתוצאות החיפוש.
בדיקה עם אופרטור
הוספת אופרטור לשאילתה מגבילה את התוצאות לפריטים שתואמים לערך האופרטור. לדוגמה, אפשר להשתמש באופרטור actor
כדי למצוא את כל הסרטים שבהם מככב שחקן ספציפי. בממשק חיפוש, אפשר להריץ את שאילתה האופרטור הזו פשוט על ידי הקלדה של צמד operator=value, כמו "actor:Zane", והקשה על Enter. כל הסרטים שבהם Zane משחק צריכים להופיע בתוצאות החיפוש.
כוונון הסכימה
אחרי שהסכימה והנתונים שלכם נכנסים לשימוש, כדאי להמשיך לעקוב אחרי מה שפועל ומה לא פועל אצל המשתמשים שלכם. כדאי לשקול לשנות את הסכימה במצבים הבאים:
- הוספה של שדה לאינדקס שלא נוסף בעבר. לדוגמה, יכול להיות שהמשתמשים שלכם יחפשו סרטים שוב ושוב לפי שם הבמאי, ולכן כדאי לשנות את הסכימה כך שתתמוך בשם הבמאי כאופרטור.
- שינוי השמות של אופרטורי החיפוש על סמך משוב ממשתמשים. שמות האופרטורים אמורים להיות ידידותיים למשתמש. אם המשתמשים שלכם 'זוכרים' באופן קבוע את שם המפעיל הלא נכון, כדאי לשקול לשנות אותו.
הוספה מחדש לאינדקס אחרי שינוי בסכימה
שינוי של אחד מהערכים הבאים בסכימה לא מחייב הוספה מחדש של הנתונים לאינדקס. אפשר פשוט לשלוח בקשה חדשה של UpdateSchema והאינדקס ימשיך לפעול:
- שמות של אופרטורים.
- ערכים מינימלי ומקסימלי של מספר שלם.
- דירוג ממוין של מספרים שלמים ומאפייני enum.
- אפשרויות עדכניות.
- אפשרויות תצוגה.
לגבי השינויים הבאים, נתונים שנוספו לאינדקס בעבר ימשיכו לפעול בהתאם לסכימה שרשומה בעבר. עם זאת, כדי לראות שינויים על סמך הסכימה המעודכנת, אם היא כוללת את השינויים הבאים, צריך להוסיף מחדש לאינדקס את הרשומות הקיימות:
- הוספה או הסרה של נכס או אובייקט חדשים
- שינוי הערכים של
isReturnable
,isFacetable
אוisSortable
מ-false
ל-true
.
צריך להגדיר את isFacetable
או isSortable
כ-true
רק אם יש לכם תרחיש לדוגמה וצרך ברור.
לבסוף, כשמעדכנים את הסכימה על ידי סימון נכס ב-isSuggestable
, צריך להוסיף מחדש את הנתונים לאינדקס, וכתוצאה מכך יש עיכוב בשימוש בהשלמה האוטומטית בנכס הזה.
שינויים אסורים בנכס
אסור לבצע שינויים מסוימים בסכימה, גם אם מוסיפים את הנתונים לאינדקס מחדש, כי הם עלולים לשבש את האינדקס או לגרום לתוצאות חיפוש לא טובות או לא עקביות. השינויים האלה כוללים:
- סוג הנתונים של הנכס.
- שם הנכס.
- ההגדרה
exactMatchWithOperator
. - ההגדרה
retrievalImportance
.
עם זאת, יש דרך לעקוף את המגבלה הזו.
ביצוע שינוי מורכב בסכימה
כדי למנוע שינויים שעשויים לגרום לתוצאות חיפוש לא טובות או לאינדקס חיפוש שבור, Cloud Search מונע סוגים מסוימים של שינויים בבקשות UpdateSchema אחרי שהמאגר נוסף לאינדקס. לדוגמה, אי אפשר לשנות את סוג הנתונים או את השם של מאפיין אחרי שהם מוגדרים. אי אפשר לבצע את השינויים האלה באמצעות בקשה פשוטה של UpdateSchema, גם אם מוסיפים את הנתונים מחדש לאינדקס.
במצבים שבהם אתם חייבים לבצע שינוי אסור בסכימה, לרוב תוכלו לבצע סדרה של שינויים מותרים שיניבו את אותו אפקט. באופן כללי, התהליך כולל העברה של נכסים שנוספו לאינדקס מהגדרת אובייקט ישנה להגדרה חדשה, ולאחר מכן שליחת בקשה להוספה לאינדקס שמשתמשת רק בנכס החדש.
כך משנים את סוג הנתונים או את השם של נכס:
- מוסיפים מאפיין חדש להגדרת האובייקט בסכימה. צריך להשתמש בשם שונה מהנכס שרוצים לשנות.
- שולחים את הבקשה UpdateSchema עם ההגדרה החדשה. חשוב לזכור לשלוח את כל הסכימה, כולל הנכס החדש והישן, בבקשה.
מילוי חוסרים (backfill) של האינדקס ממאגר הנתונים. כדי למלא את האינדקס, שולחים את כל הבקשות להוספה לאינדקס באמצעות הנכס החדש, אבל לא באמצעות הנכס הישן, כי הדבר יוביל לספירה כפולה של התאמות לשאילתות.
- במהלך השלמת הנתונים ב-Index, צריך לבדוק אם הנכס החדש קיים ולהגדיר כברירת מחדל את הנכס הישן כדי למנוע התנהגות לא עקבית.
- אחרי השלמת המילוי, מריצים שאילתות בדיקה כדי לוודא שהכול תקין.
מוחקים את הנכס הישן. שולחים בקשה נוספת של UpdateSchema בלי שם הנכס הישן, ומפסיקים להשתמש בשם הנכס הישן בבקשות נוספות להוספה לאינדקס.
מעבירים את כל השימוש בנכס הישן לנכס החדש. לדוגמה, אם משנים את שם הנכס מ'יוצר' ל'מחבר', צריך לעדכן את קוד השאילתה כך שישתמש ב'מחבר' במקום 'יוצר'.
מערכת Cloud Search שומרת תיעוד של כל אובייקט או מאפיין שנמחקו למשך 30 יום, כדי להגן מפני שימוש חוזר שעלול לגרום לתוצאות בלתי צפויות בהוספה לאינדקס. במהלך 30 הימים האלה, עליכם להפסיק את כל השימוש באובייקט או בנכס שנמחקו, כולל השמטה שלהם מבקשות נוספות להוספה לאינדקס. כך תוכלו להחזיר את הנכס או האובייקט מאוחר יותר, בלי לפגוע בתקינות האינדקס.
מגבלות הגודל
ב-Cloud Search יש מגבלות על הגודל של אובייקטים וסכימות של נתונים מובְנים. המגבלות האלה הן:
- המספר המקסימלי של אובייקטים ברמה העליונה הוא 10 אובייקטים.
- העומק המקסימלי של היררכיית נתונים מובְנים הוא 10 רמות.
- המספר הכולל של השדות באובייקט מוגבל ל-1,000, כולל מספר השדות הפרימיטיביים וסכום מספר השדות בכל אובייקט בתצוגת עץ.
השלבים הבאים
הנה כמה שלבים אפשריים:
יוצרים ממשק חיפוש כדי לבדוק את הסכימה.
לשפר את הסכימה כדי לשפר את איכות החיפוש.
איך משתמשים בסכימה
_dictionaryEntry
כדי להגדיר מילים נרדפות למונחים נפוצים בחברה כדי להשתמש בסכימה_dictionaryEntry
, אפשר לעיין במאמר הגדרת מילים נרדפות.יוצרים מחבר.