סכימה של Google Cloud Search היא מבנה JSON שמגדיר את האובייקטים, המאפיינים והאפשרויות שבהם יש להשתמש באינדוקס ובשאילתות של הנתונים. מחבר התוכן קורא נתונים מהמאגר, ועל סמך הסכימה הרשומה, הוא יוצר מבנה לנתונים ומבצע אינדוקס שלהם.
כדי ליצור סכימה, צריך לספק אובייקט סכימת JSON ל-API ואז לרשום אותו. כדי לאנדקס את הנתונים, צריך לרשום אובייקט סכימה לכל אחד מהמאגרים.
במסמך הזה נסביר את עקרונות הבסיס של יצירת סכימה. לקבלת מידע על אופטימיזציה של סכימה כדי לשפר את חוויית החיפוש, אפשר לעיין במאמר בנושא שיפור איכות החיפוש.
יצירה של סכימה
בהמשך מפורטים השלבים ליצירת סכימת Cloud Search:
- זיהוי התנהגות משתמשים צפויה
- איך מאתחלים מקור נתונים
- יצירת סכימה
- סכימה לדוגמה מלאה
- רישום הסכימה
- אינדוקס של הנתונים
- בדיקת הסכימה
- התאמה אישית של הסכימה
זיהוי התנהגות משתמשים צפויה
הבנה של סוגי השאילתות שהמשתמשים שלכם מגישים עוזרת לכם לגבש את האסטרטגיה ליצירת הסכמה.
לדוגמה, כשמריצים שאילתות במסד נתונים של סרטים, יכול להיות שתצפו לכך שהמשתמשים יריצו שאילתה כמו "הצגת כל הסרטים שבהם מככב רוברט רדפורד". לכן, הסכימה שלכם צריכה לתמוך בתוצאות של שאילתות שמבוססות על "כל הסרטים עם שחקן מסוים".
כדי להגדיר את הסכימה כך שתשקף את דפוסי ההתנהגות של המשתמשים, כדאי לבצע את המשימות הבאות:
- הערכה של מגוון רחב של שאילתות רצויות ממשתמשים שונים.
- מזהים את האובייקטים שאולי ישמשו בשאילתות. אובייקטים הם קבוצות לוגיות של נתונים קשורים, כמו סרט במסד נתונים של סרטים.
- זיהוי המאפיינים והערכים שמרכיבים את האובייקט ואולי ישמשו בשאילתות. מאפיינים הם מאפיינים של האובייקט שאפשר להוסיף לאינדקס. הם יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים. לדוגמה, לאובייקט מסוג סרט יכולים להיות מאפיינים כמו שם הסרט ותאריך היציאה שלו לאקרנים כערכים פרימיטיביים. אובייקט הסרט יכול להכיל גם אובייקטים אחרים, כמו שחקנים, שיש להם מאפיינים משלהם, כמו שם או תפקיד.
- לזהות ערכים תקינים לדוגמה של מאפיינים. הערכים הם הנתונים בפועל שעברו אינדוקס עבור מאפיין. לדוגמה, שם של סרט במסד הנתונים יכול להיות 'שודדי התיבה'.
- קובעים את אפשרויות המיון והדירוג שהמשתמשים רוצים. לדוגמה, כשמשתמשים מחפשים סרטים, יכול להיות שהם ירצו למיין אותם לפי סדר כרונולוגי ולדרג אותם לפי דירוג הצופים, ולא לפי סדר אלפביתי של השמות.
- (אופציונלי) כדאי לבדוק אם אחד מהנכסים מייצג הקשר ספציפי יותר שבו יכולים להתבצע חיפושים, כמו התפקיד או המחלקה של המשתמשים, כדי שאפשר יהיה לספק הצעות להשלמה אוטומטית על סמך ההקשר. לדוגמה, כשמשתמשים מחפשים סרטים במסד נתונים, יכול להיות שהם יתעניינו רק בז'אנר מסוים של סרטים. המשתמשים יגדירו את הז'אנר שהם רוצים שיוצג בתוצאות החיפוש שלהם, אולי כחלק מפרופיל המשתמש שלהם. לאחר מכן, כשמשתמש מתחיל להקליד שאילתה של סרטים, רק סרטים בז'אנר המועדף עליו, כמו 'סרטי פעולה', מוצעים כחלק מההצעות להשלמה אוטומטית.
- יוצרים רשימה של האובייקטים, המאפיינים וערכי הדוגמה האלה שאפשר להשתמש בהם בחיפושים. (פרטים על השימוש ברשימה הזו מופיעים בקטע הגדרת אפשרויות של אופרטורים).
אתחול מקור הנתונים
מקור נתונים מייצג את הנתונים ממאגר שעברו אינדוקס ושנשמרו ב-Google Cloud. הוראות להפעלת מקור נתונים מפורטות במאמר בנושא ניהול מקורות נתונים של צד שלישי.
תוצאות החיפוש של המשתמש מוחזרות ממקור הנתונים. כשמשתמש לוחץ על תוצאת חיפוש, Cloud Search מפנה אותו לפריט עצמו באמצעות כתובת ה-URL שסופקה בבקשה להוספה לאינדקס.
הגדרת האובייקטים
היחידה הבסיסית של נתונים בסכימה היא אובייקט, שנקרא גם אובייקט סכימה. זהו מבנה לוגי של נתונים. במסד נתונים של סרטים, מבנה לוגי אחד של נתונים הוא 'סרט'. אובייקט אחר יכול להיות 'אדם' כדי לייצג את צוות השחקנים והצוות שהשתתפו בסרט.
לכל אובייקט בסכימה יש סדרה של מאפיינים שמתארים את האובייקט, כמו שם הסרט ומשך ההפעלה שלו, או השם ותאריך הלידה של אדם. המאפיינים של אובייקט יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים.
איור 1 מציג את אובייקטי הסרט והאדם ואת המאפיינים המשויכים.

סכימת Cloud Search היא בעצם רשימה של הצהרות להגדרת אובייקטים, שמוגדרות בתג objectDefinitions
. בקטע הסכימה הבא מוצגות הצהרות objectDefinitions
לגבי אובייקטים של סכימת סרט ואדם.
{
"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
– מציין שאפשר להשתמש במאפיין כדי ליצור היבטים. היבט משמש לשיפור תוצאות החיפוש. המשתמש רואה את התוצאות הראשוניות ואז מוסיף קריטריונים, או היבטים, כדי לשפר עוד יותר את התוצאות האלה. אי אפשר להגדיר את האפשרות הזו כ-true לנכסים שהסוג שלהם הוא אובייקט, וצריך להגדיר את האפשרותisReturnable
כ-true כדי להגדיר את האפשרות הזו. לבסוף, האפשרות הזו נתמכת רק עבור נכסי enum, boolean וטקסט. לדוגמה, בסכימה לדוגמה שלנו, יכול להיות שנגדיר אתgenre
, actorName
, userRating
ו-mpaaRating
כמאפיינים שניתן לסנן לפיהם, כדי לאפשר שימוש בהם לסינון אינטראקטיבי של תוצאות החיפוש. -
isWildcardSearchable
מציין שהמשתמשים יכולים לבצע חיפוש עם תווים כלליים במאפיין הזה. האפשרות הזו זמינה רק בנכסי טקסט. האופן שבו מתבצע חיפוש עם תו כללי בשדה הטקסט תלוי בערך שמוגדר בשדה exactMatchWithOperator. אם הערך שלexactMatchWithOperator
הואtrue
, ערך הטקסט עובר טוקניזציה כערך אטומי אחד, ומתבצע חיפוש עם תו כללי. לדוגמה, אם ערך הטקסט הואscience-fiction
, שאילתת תו כלליscience-*
תתאים לו. אםexactMatchWithOperator
מוגדר לערךfalse
, ערך הטקסט עובר טוקניזציה ומתבצע חיפוש עם תו כללי לחיפוש לכל טוקן. לדוגמה, אם ערך הטקסט הוא 'מדע בדיוני', שאילתות עם התו הכללי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
, מחרוזת השאילתה צריכה להיות זהה לערך המאפיין כולו, ולא רק להיות חלק מהטקסט.
ערך הטקסט יתפרש כערך אטומי אחד בחיפושים עם אופרטורים ובהתאמות של היבטים.
לדוגמה, כדאי להוסיף לאינדקס אובייקטים מסוג Book או Movie עם מאפייני ז'אנר.
ז'אנרים יכולים לכלול את האפשרויות 'מדע בדיוני', 'מדע' ו'בדיוני'. אם הערך של
exactMatchWithOperator
הוא false
או שהוא לא מוגדר,
חיפוש של ז'אנר או בחירה של ההיבט Science (מדע) או Fiction (בדיוני) יחזירו גם תוצאות של Science-Fiction (מדע בדיוני), כי הטקסט עובר טוקניזציה והטוקנים Science ו-Fiction קיימים ב-Science-Fiction.
אם exactMatchWithOperator
הוא true
, הטקסט נחשב לטוקן יחיד, ולכן לא מתבצעת התאמה בין 'מדע' או 'בדיוני' לבין 'מדע בדיוני'.
(אופציונלי) הוספת הקטע displayOptions
בסוף כל קטע propertyDefinition
יש קטע אופציונלי displayOptions
. הקטע הזה מכיל מחרוזת אחת של 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[]
קטע
בסוף כל קטע propertyDefinition
יש קטע suggestionFilteringOperators[]
אופציונלי. בקטע הזה מגדירים מאפיין שמשמש לסינון הצעות להשלמה אוטומטית. לדוגמה, אפשר להגדיר את האופרטור של 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. האינדוקס מתבצע בדרך כלל במחבר התוכן.
אם משתמשים בסכימת הסרט, בקשת אינדוקס ל-REST API של סרט אחד תיראה כך:
{
"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 ולוחצים על Return. כל הסרטים עם המילה 'טיטניק' צריכים להופיע בתוצאות החיפוש.
בדיקה עם אופרטור
הוספת אופרטור לשאילתה מגבילה את התוצאות לפריטים שתואמים לערך של האופרטור. לדוגמה, אפשר להשתמש באופרטור actor
כדי למצוא את כל הסרטים שמשתתף בהם שחקן מסוים. כדי להשתמש באופרטור הזה, פשוט מקלידים בממשק החיפוש זוג operator=value, כמו "actor:Zane", ולוחצים על Return. כל הסרטים שבהם משחק
יוחזרו בתוצאות החיפוש.
כוונון הסכימה
אחרי שמתחילים להשתמש בסכימה ובנתונים, חשוב להמשיך לעקוב אחרי מה שעובד ומה שלא עובד עבור המשתמשים. כדאי לשקול לשנות את הסכימה במצבים הבאים:
- הוספה לאינדקס של שדה שלא נוסף לאינדקס בעבר. לדוגמה, יכול להיות שהמשתמשים שלכם יחפשו שוב ושוב סרטים לפי שם הבמאי, ולכן כדאי להתאים את הסכימה כך שתתמוך בשם הבמאי כאופרטור.
- שינוי השמות של אופרטורים לחיפוש על סמך משוב ממשתמשים. שמות האופרטורים אמורים להיות ידידותיים למשתמש. אם המשתמשים שלכם כל הזמן "זוכרים" שם של מפעיל לא נכון, כדאי לשקול לשנות אותו.
יצירת אינדקס מחדש אחרי שינוי בסכימה
אם משנים את אחד מהערכים הבאים בסכימה, לא צריך ליצור מחדש את האינדקס של הנתונים. פשוט שולחים בקשה חדשה של UpdateSchema והאינדקס ימשיך לפעול:
- שמות האופרטורים.
- ערכי מינימום ומקסימום של מספרים שלמים.
- דירוג מסודר של מספרים שלמים וסוגי ספירה.
- אפשרויות רענון.
- אפשרויות תצוגה.
בשינויים הבאים, נתונים שסונכרנו בעבר ימשיכו לפעול בהתאם לסכימה שנרשמה קודם לכן. עם זאת, אם הסכימה המעודכנת כוללת את השינויים הבאים, צריך ליצור מחדש את האינדקס של הרשומות הקיימות כדי לראות את השינויים:
- הוספה או הסרה של נכס או אובייקט חדשים
- שינוי
isReturnable
,isFacetable
אוisSortable
מ-false
ל-true
.
צריך להגדיר את isFacetable
או isSortable
ל-true
רק אם יש לכם תרחיש שימוש ברור וצורך ברור.
לבסוף, כשמעדכנים את הסכימה על ידי סימון מאפיין isSuggestable
,
צריך ליצור מחדש את האינדקס של הנתונים, מה שגורם לעיכוב בשימוש בהשלמה האוטומטית של המאפיין הזה.
שינויים אסורים בנכס
יש שינויים בסכימה שאסור לבצע, גם אם מבצעים אינדוקס מחדש של הנתונים, כי הם יפגעו באינדקס או יניבו תוצאות חיפוש לא טובות או לא עקביות. השינויים האלה כוללים:
- סוג הנתונים של הנכס.
- שם הנכס.
- הגדרה של
exactMatchWithOperator
. - הגדרה של
retrievalImportance
.
עם זאת, יש דרך לעקוף את המגבלה הזו.
ביצוע שינוי מורכב בסכימה
כדי למנוע שינויים שיובילו לתוצאות חיפוש לא טובות או לאינדקס חיפוש פגום, Cloud Search מונע סוגים מסוימים של שינויים בבקשות UpdateSchema אחרי שהמאגר עבר אינדוקס. לדוגמה, אי אפשר לשנות את סוג הנתונים או את השם של מאפיין אחרי שהם נקבעו. אי אפשר לבצע את השינויים האלה באמצעות בקשת UpdateSchema פשוטה, גם אם מבצעים אינדוקס מחדש של הנתונים.
במקרים שבהם אתם חייבים לבצע שינוי בסכימה שהוא אסור, לרוב תוכלו לבצע סדרה של שינויים מותרים שישיגו את אותה תוצאה. בדרך כלל, התהליך כולל קודם העברה של מאפיינים שעברו אינדוקס מהגדרת אובייקט ישנה להגדרת אובייקט חדשה, ואז שליחה של בקשת אינדוקס שמשתמשת רק במאפיין החדש.
כדי לשנות את סוג הנתונים או את השם של מאפיין:
- מוסיפים מאפיין חדש להגדרת האובייקט בסכימה. להשתמש בשם אחר מהנכס שרוצים לשנות.
- שולחים בקשת UpdateSchema עם ההגדרה החדשה. חשוב לזכור לשלוח את הסכימה כולה בבקשה, כולל הנכס החדש והנכס הישן.
מבצעים מילוי חוסרים (backfill) באינדקס ממאגר הנתונים. כדי למלא מחדש את האינדקס, שולחים את כל בקשות האינדוקס באמצעות המאפיין החדש, אבל לא באמצעות המאפיין הישן, כי זה יוביל לספירה כפולה של התאמות לשאילתות.
- במהלך מילוי חוסרים באינדקס, המערכת בודקת אם יש מאפיין חדש, ואם לא, היא משתמשת במאפיין הישן כדי למנוע התנהגות לא עקבית.
- אחרי שהמילוי החוזר מסתיים, מריצים שאילתות בדיקה כדי לוודא שהמילוי החוזר פועל.
מוחקים את המאפיין הישן. שולחים בקשת UpdateSchema נוספת בלי שם המאפיין הישן, ומפסיקים להשתמש בשם המאפיין הישן בבקשות עתידיות ליצירת אינדקס.
מעבירים את כל השימוש בנכס הישן לנכס החדש. לדוגמה, אם משנים את שם המאפיין מ-creator ל-author, צריך לעדכן את קוד השאילתה כך שבמקום creator יופיע author.
Cloud Search שומר תיעוד של כל מאפיין או אובייקט שנמחקו למשך 30 יום, כדי להגן מפני שימוש חוזר שעלול לגרום לתוצאות לא צפויות של יצירת אינדקס. במהלך 30 הימים האלה, עליך להפסיק להשתמש באובייקט או במאפיין שנמחקו, כולל להשמיט אותם מבקשות עתידיות לאינדקס. כך תוכלו לוודא שאם תחליטו בהמשך להחזיר את הנכס או האובייקט, תוכלו לעשות זאת בלי לפגוע בדיוק של האינדקס.
מידע על מגבלות הגודל
ב-Cloud Search יש מגבלות על הגודל של אובייקטים וסכימות של נתונים מובְנים. המגבלות הן:
- המספר המקסימלי של אובייקטים ברמה העליונה הוא 10.
- העומק המקסימלי של היררכיית נתונים מוּבְנִים הוא 10 רמות.
- המספר הכולל של השדות באובייקט מוגבל ל-1,000, כולל מספר השדות הפרימיטיביים בתוספת סכום השדות בכל אובייקט מקונן.
השלבים הבאים
הנה כמה שלבים אפשריים:
יוצרים ממשק חיפוש כדי לבדוק את הסכימה.
כדאי לכוונן את הסכימה כדי לשפר את איכות החיפוש.
_dictionaryEntry
סכימה כדי להגדיר מילים נרדפות למונחים נפוצים בשימוש בחברה. כדי להשתמש בסכימה_dictionaryEntry
, אפשר לעיין במאמר בנושא הגדרת מילים נרדפות.יוצרים מחבר.