יצירה ורישום של סכימה

סכימה של Google Cloud Search היא מבנה בפורמט JSON שמגדיר את האובייקטים, המאפיינים והאפשרויות שבהם משתמשים כדי להוסיף נתונים לאינדקס ולהרצת שאילתות לגבי הנתונים. מחבר התוכן קורא נתונים ממאגר הנתונים, ובהתאם לסכימה הרשומה, בונה את הנתונים ומוסיף אותם לאינדקס.

אפשר ליצור סכימה על ידי הוספת אובייקט של סכימת JSON ל-API, ולאחר מכן רישום שלו. כדי שתוכלו להוסיף את הנתונים לאינדקס, אתם צריכים לרשום אובייקט סכימה לכל אחד מהמאגרים.

במסמך הזה נסביר את העקרונות הבסיסיים של יצירת סכימה. במאמר שיפור איכות החיפוש מוסבר איך לכוונן את הסכימה כדי לשפר את חוויית החיפוש.

יצירה של סכימה

בהמשך מפורטת רשימה של שלבים ליצירת הסכימה של Cloud Search:

  1. זיהוי התנהגות המשתמשים הצפויה
  2. הפעלה של מקור נתונים
  3. יצירת סכימה
  4. השלמת הסכימה לדוגמה
  5. רישום הסכימה
  6. הוספת הנתונים לאינדקס
  7. בדיקת הסכימה
  8. כוונון הסכימה

זיהוי של התנהגות משתמשים צפויה

צפייה בסוגי השאילתות שהמשתמשים שלכם שולחים עוזרת לתכנן את האסטרטגיה ליצירת הסכימה.

לדוגמה, כשמריצים שאילתות למסד נתונים של סרטים, אפשר לצפות שהמשתמש יבצע שאילתה כמו "Show me all movies starring רוברט רדפורד". לכן, הסכימה שלכם חייבת לתמוך בתוצאות של שאילתות שמבוססות על 'כל הסרטים עם שחקן ספציפי'.

כדי להגדיר את הסכימה כך שתשקף את דפוסי ההתנהגות של המשתמשים, מומלץ לבצע את המשימות הבאות:

  1. להעריך קבוצה מגוונת של שאילתות רצויות ממשתמשים שונים.
  2. אתם יכולים לזהות את האובייקטים שבהם אפשר להשתמש בשאילתות. אובייקטים הם קבוצות לוגיות של נתונים קשורים, כמו סרט במסד נתונים של סרטים.
  3. זיהוי המאפיינים והערכים שמרכיבים את האובייקט ושאפשר להשתמש בהם בשאילתות. מאפיינים הם המאפיינים של האובייקט שאפשר להוסיף לאינדקס. הם יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים. לדוגמה, לאובייקט של סרט יכולות להיות מאפיינים כמו שם הסרט ותאריך הפרסום שלו כערכים ראשוניים. אובייקט הסרט עשוי גם להכיל אובייקטים אחרים, כמו חברי צוות, שיש להם מאפיינים משלהם, כמו שם או תפקיד.
  4. ניתן לזהות ערכים חוקיים לדוגמה של נכסים. ערכים הם הנתונים שנוספו לאינדקס בפועל עבור נכס מסוים. לדוגמה, שם של סרט אחד במסד הנתונים יכול להיות "השודדות במשחק האבוד".
  5. אתם יכולים לקבוע את אפשרויות המיון והדירוג הרצויות שהמשתמשים שלכם רוצים. לדוגמה, בתגובה לשאילתות על סרטים, יכול להיות שהמשתמשים ירצו למיין את הפריטים בסדר כרונולוגי ולדרג אותם לפי דירוג הקהל, ולא יצטרכו למיין אותם בסדר אלפביתי לפי שם.
  6. (אופציונלי) אם אחד מהנכסים מייצג הקשר ספציפי יותר שבו אפשר לבצע חיפושים, כמו התפקיד או המחלקה של המשתמש, כדי לקבל הצעות להשלמה אוטומטית בהתאם להקשר. לדוגמה, אנשים שמחפשים מסד נתונים של סרטים עשויים להתעניין רק בז'אנר מסוים של סרטים. המשתמשים יגדירו את הז'אנר שהם רוצים שהחיפושים יחזרו, כנראה במסגרת פרופיל המשתמש. לאחר מכן, כשמשתמש מתחיל להקליד שאילתה על סרטים, המערכת תציע רק סרטים מהז'אנר המועדף עליו, כמו 'סרטי פעולה', כחלק מהצעות להשלמה אוטומטית.
  7. מכינים רשימה של האובייקטים, המאפיינים והערכים לדוגמה שבהם אפשר להשתמש בחיפושים. (למידע נוסף על אופן השימוש ברשימה הזו, קראו את הקטע הגדרת אפשרויות אופרטורים).

אתחול מקור הנתונים

מקור נתונים מייצג את הנתונים ממאגר שנוסף לאינדקס ונשמר ב-Google Cloud. הוראות לאתחול מקור נתונים זמינות במאמר ניהול מקורות נתונים של צד שלישי.

תוצאות החיפוש של המשתמש מוחזרות ממקור הנתונים. כשמשתמש לוחץ על תוצאת חיפוש, Cloud Search מפנה את המשתמשים אל הפריט בפועל באמצעות כתובת ה-URL שצוינה בבקשת ההוספה לאינדקס.

הגדרת האובייקטים

יחידת הנתונים הבסיסית בסכימה היא האובייקט, שנקרא גם אובייקט סכימה, שהוא מבנה לוגי של נתונים. במסד נתונים של סרטים, מבנה לוגי אחד של נתונים הוא 'סרט'. אובייקט נוסף יכול להיות "אדם", שמייצג את צוות השחקנים ואת הצוות שמעורבים בסרט.

לכל אובייקט בסכימה יש סדרה של מאפיינים או מאפיינים שמתארים את האובייקט, כמו השם ומשך הזמן של סרט, או השם ותאריך הלידה של אדם. המאפיינים של אובייקט יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים.

איור 1 מציג את האובייקטים של הסרט והאדם ואת המאפיינים המשויכים.

שרטוט של חיבורי סכימה בין ישויות
איור 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 – מציין שניתן להשתמש בנכס ליצירת facets. היבט משמש לצמצום תוצאות החיפוש, שבהן המשתמש רואה את התוצאות הראשוניות ולאחר מכן מוסיף קריטריונים או מאפיינים כדי לצמצם את התוצאות עוד יותר. האפשרות הזו לא יכולה להיות True לנכסים שהסוג שלהם הוא אובייקט, והערך isReturnable חייב להיות True כדי להגדיר את האפשרות הזו. לבסוף, האפשרות הזו נתמכת רק במאפיינים enum, בוליאני וטקסט. לדוגמה, בסכימה לדוגמה שלנו, ייתכן שנהפוך את הטבלה genre, actorName, userRating ו-mpaaRating לטבלה כדי לאפשר להן לשמש לחידוד אינטראקטיבי של תוצאות החיפוש.
  • isWildcardSearchable מציין שמשתמשים יכולים לבצע חיפוש עם תווים כלליים לחיפוש בנכס הזה. האפשרות הזו זמינה רק בנכסי טקסט. אופן הפעולה של חיפוש עם תווים כלליים בשדה הטקסט תלוי בערך שהוגדר בשדה exactMatchWithOperator. אם המדיניות exactMatchWithOperator מוגדרת ל-true, ערך הטקסט עובר המרה לאסימונים כערך אטומי אחד ומבוצע חיפוש עם תווים כלליים לחיפוש. לדוגמה, אם ערך הטקסט הוא science-fiction, השאילתה עם התו הכללי לחיפוש science-* תואמת אליה. אם המדיניות exactMatchWithOperator מוגדרת לערך false, ערך הטקסט עובר המרה לאסימונים ומבוצע חיפוש עם תווים כלליים לחיפוש בכל אסימון. לדוגמה, אם ערך הטקסט הוא 'מדע בדיוני', התו הכללי לחיפוש sci* או fi* תואם לפריט, אבל science-* לא תואם לו.

הפרמטרים הכלליים האלה של פונקציונליות החיפוש הם ערכים בוליאניים. בכולם ערך ברירת המחדל הוא false וצריך להגדיר אותם כ-true כדי להשתמש בהם.

בטבלה הבאה מוצגים הפרמטרים הבוליאניים שמוגדרים ל-true לכל המאפיינים של האובייקט movie:

מאפיין (property) 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), אבל לא בשתיהן.

אלו הם האובייקטים מסוג נתונים שמשמשים לציון סוגי הנתונים של המאפיינים בסכימת הסרט לדוגמה:

מאפיין (property) אובייקט מסוג נתונים
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" },
    ...
  },
  ...
}

אלה האפשרויות הנוספות שספציפיות לסוג שמשמש בסכימה לדוגמה:

מאפיין (property) סוג אפשרויות ספציפיות לסוג
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

בסוף כל קטע של 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 בסכימה לדוגמה:

מאפיין (property) 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. ההוספה לאינדקס מתבצעת בדרך כלל בתוך מחבר התוכן שלכם.

בעזרת סכימת הסרט, בקשת הוספה לאינדקס של 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" ולחיצה על Return. כל הסרטים שבהם מופיעה המילה 'טיטאניק' אמורים להופיע בתוצאות החיפוש.

בדיקה עם אופרטור

הוספת אופרטור לשאילתה מגבילה את התוצאות לפריטים שתואמים לערך האופרטור הזה. לדוגמה, אפשר להשתמש באופרטור actor כדי למצוא את כל הסרטים שבהם מככב שחקן מסוים. באמצעות ממשק חיפוש, אפשר לבצע את שאילתת האופרטור הזו פשוט על ידי הקלדת צמד operator=value, כמו "actor:Zane" ולחיצה על Return. כל הסרטים שבהם זאן מופיע כשחקן אמורים להיות מוחזרים בתוצאות החיפוש.

לכוונן את הסכימה

אחרי השימוש בסכימה ובנתונים, כדאי להמשיך לבדוק מה עובד ומה לא עובד אצל המשתמשים. כדאי לשנות את הסכימה במצבים הבאים:

  • הוספת שדה לאינדקס שלא נוסף לאינדקס בעבר. לדוגמה, יכול להיות שהמשתמשים שלכם יחפשו שוב ושוב סרטים לפי שם הבמאי, לכן כדאי לשנות את הסכימה כך שתתמוך בשם הבמאי כאופרטור.
  • שינוי שמות של אופרטורים של חיפוש על סמך משוב ממשתמשים. שמות האופרטורים צריכים להיות ידידותיים למשתמש. אם המשתמשים שלכם "זוכרים" באופן עקבי את שם המפעיל הלא נכון, כדאי לשנות אותו.

הוספה מחדש לאינדקס לאחר שינוי סכימה

שינוי אחד מהערכים הבאים בסכימה לא מחייב אתכם להוסיף מחדש את הנתונים לאינדקס. אפשר פשוט לשלוח בקשת UpdateSchema חדשה והאינדקס שלכם ימשיך לפעול:

  • שמות המפעילים.
  • ערכי מינימום ומקסימום במספר שלם.
  • דירוג לפי מספר שלם ו-enum.
  • אפשרויות עדכניות.
  • אפשרויות תצוגה.

בעקבות השינויים הבאים, נתונים שכבר נוספו לאינדקס ימשיכו לפעול בהתאם לסכימה שרשומה בעבר. אבל אם כן, צריך להוסיף מחדש לאינדקס את הרשומות הקיימות כדי לראות שינויים בהתאם לסכימה המעודכנת:

  • הוספה או הסרה של נכס או אובייקט חדשים
  • שינוי של isReturnable, isFacetable או isSortable מ-false ל-true.

כדאי להגדיר את isFacetable או isSortable לערך true רק אם יש לכם תרחיש לדוגמה ברור.

לבסוף, כשמעדכנים את הסכימה על ידי סימון המאפיין isSuggestable, צריך להוסיף מחדש את הנתונים לאינדקס, ולכן יש עיכוב בשימוש בהשלמה האוטומטית בנכס הזה.

שינויים אסורים בנכסים

אסור לבצע שינויים מסוימים בסכימה, גם אם מוסיפים מחדש את הנתונים לאינדקס, כי הם יגרמו לפגיעה באינדקס או ליצירת תוצאות חיפוש גרועות או לא עקביות. זה כולל שינויים ב:

  • סוג הנתונים של הנכס.
  • שם הנכס.
  • ההגדרה exactMatchWithOperator.
  • ההגדרה retrievalImportance.

עם זאת, יש דרך לעקוף את המגבלה הזו.

ביצוע שינוי מורכב בסכימה

כדי למנוע שינויים שיובילו לתוצאות חיפוש גרועות או לאינדקס חיפוש לא תקין, Cloud Search מונע סוגים מסוימים של שינויים בבקשות UpdateSchema אחרי הוספת המאגר לאינדקס. לדוגמה, אי אפשר לשנות את סוג הנתונים או את השם של מאפיין אחרי שמגדירים אותם. אי אפשר להשיג את השינויים האלו באמצעות בקשת UpdateSchema פשוטה, גם אם מוסיפים מחדש את הנתונים לאינדקס.

במצבים שבהם צריך לבצע שינוי אסור בסכימה, לעיתים קרובות אפשר לבצע סדרה של שינויים מותרים שמובילים לאותה השפעה. באופן כללי, כדי לעשות את זה צריך להעביר קודם את המאפיינים שנוספו לאינדקס מהגדרת אובייקט ישנה יותר להגדרה חדשה יותר, ואז לשלוח בקשה להוספה לאינדקס שמשתמשת רק בנכס החדש.

השלבים הבאים מראים איך לשנות את סוג הנתונים או את השם של נכס:

  1. מוסיפים מאפיין חדש להגדרת האובייקט בסכימה. משתמשים בשם שונה מזה של הנכס שרוצים לשנות.
  2. שולחים את הבקשה UpdateSchema עם ההגדרה החדשה. חשוב לזכור לשלוח בבקשה את הסכימה המלאה, כולל הנכס החדש והנכס הישן.
  3. מילוי חוסרים של האינדקס ממאגר הנתונים. כדי למלא את החוסרים (backfill) באינדקס, צריך לשלוח את כל הבקשות להוספה לאינדקס באמצעות הנכס החדש, אבל לא באמצעות הנכס הישן, כי הפעולה תגרום לספירה כפולה של התאמות לשאילתות.

    1. במהלך מילוי החוסרים (backfill) של ההוספה לאינדקס, כדאי לחפש את הנכס החדש ולהשתמש כברירת מחדל בנכס הישן כדי למנוע התנהגות לא עקבית.
    2. בסיום המילוי החוסרי, מריצים שאילתות בדיקה כדי לאמת.
  4. מוחקים את הנכס הישן. שולחים בקשת UpdateSchema נוספת ללא שם המאפיין הישן ומפסיקים להשתמש בשם המאפיין הישן בבקשות עתידיות להוספה לאינדקס.

  5. מעבירים את כל השימושים בנכס הישן לנכס החדש. לדוגמה, אם משנים את שם הנכס מיוצר למחבר, צריך לעדכן את קוד השאילתה כך שישתמש במחבר במקום שבו הוא הפנה בעבר ליוצר או למחבר.

Cloud Search שומר תיעוד של כל נכס או אובייקט שנמחקו למשך 30 ימים, כדי להגן מפני שימוש חוזר שעלול לגרום לתוצאות לא צפויות בהוספה לאינדקס. במהלך 30 הימים האלה, צריך להימנע מכל השימוש באובייקט או בנכס שנמחקו, כולל השמטת נתונים מבקשות עתידיות להוספה לאינדקס. כך אפשר להבטיח שאם תחליטו להחזיר את המאפיין או את האובייקט בשלב מאוחר יותר, תוכלו לעשות זאת באופן שישמור על תקינות האינדקס.

היכרות עם מגבלות הגודל

ב-Cloud Search יש מגבלות על הגודל של סכימות ואובייקטים של נתונים מובְנים. המגבלות האלה:

  • המספר המקסימלי של אובייקטים ברמה העליונה הוא 10 אובייקטים.
  • העומק המקסימלי של היררכיית נתונים מובְנים הוא 10 רמות.
  • המספר הכולל של השדות באובייקט מוגבל ל-1,000, והוא כולל את מספר השדות הראשוניים ואת הסכום של מספר השדות בכל אובייקט בתוך אובייקט.

השלבים הבאים

אפשר לנסות את הפתרונות הבאים:

  1. יוצרים ממשק חיפוש כדי לבדוק את הסכימה.

  2. לכוונן את הסכימה כדי לשפר את איכות החיפוש.

  3. בניית סכימה לפירוש שאילתות אופטימלי.

  4. כאן תלמדו איך להשתמש בסכימה _dictionaryEntry כדי להגדיר מילים נרדפות למונחים נפוצים בחברה שלכם. כדי להשתמש בסכימה _dictionaryEntry, קראו את המאמר הגדרת מילים נרדפות.

  5. יוצרים מחבר.