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

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

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

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

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

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

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

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

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

לדוגמה, כשאתם מריצים שאילתות על מסד נתונים של סרטים, אתם עשויים לצפות שמשתמש ישאל שאילתה כמו "Show me all Movies in the David Redford". לכן, הסכימה חייבת לתמוך בתוצאות שאילתות שמבוססות על "כל הסרטים עם שחקן ספציפי".

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

  1. להעריך קבוצה מגוונת של שאילתות רצויות ממשתמשים שונים.
  2. מזהים את האובייקטים שאפשר להשתמש בהם בשאילתות. אובייקטים הם קבוצות לוגיות של נתונים קשורים, כמו סרט במסד נתונים של סרטים.
  3. מזהים את המאפיינים והערכים שמרכיבים את האובייקט, ושאפשר להשתמש בהם בשאילתות. מאפיינים הם המאפיינים של האובייקט שאפשר להוסיף לאינדקס. הם יכולים לכלול ערכים פרימיטיביים או אובייקטים אחרים. לדוגמה, לאובייקט של סרט יכולים להיות ערכים כמו שם הסרט ותאריך הפרסום שלו כערכים ראשוניים. האובייקט של הסרט עשוי להכיל גם אובייקטים אחרים, כמו חברי CAST, שיש להם מאפיינים משלהם, כמו השם או התפקיד שלהם.
  4. זיהוי ערכים חוקיים לדוגמה עבור מאפיינים. ערכים הם הנתונים שנוספו בפועל לאינדקס בנכס. לדוגמה, שם של סרט במסד הנתונים יכול להיות "Raiders of the Lost Ark".
  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 – מציין אם המאפיין מזהה נתונים שצריך להחזיר בתוצאות חיפוש דרך ה-API של השאילתה. אפשר להחזיר את כל מאפייני הסרטים לדוגמה. אפשר להשתמש בנכסים שאינם ניתנים להחזרה לצורך חיפוש או דירוג של תוצאות, בלי שיוחזרו למשתמש.
  • isRepeatable - מציין אם מותר להשתמש במספר ערכים עבור המאפיין. לדוגמה, לסרט יש תאריך הפצה אחד בלבד אבל יכולים להיות בו כמה שחקנים.
  • isSortable – מציין שאפשר להשתמש במאפיין למיון. המצב הזה לא יכול להיות נכון לנכסים שחוזרים על עצמם. לדוגמה, אפשר למיין תוצאות של סרטים לפי תאריך הפרסום או דירוג הקהל.
  • isFacetable – מציין שאפשר להשתמש בנכס כדי ליצור facets. היבט משמש לצמצום תוצאות חיפוש שבהן המשתמש רואה את התוצאות הראשוניות ולאחר מכן מוסיף קריטריונים או מאפיינים, כדי לצמצם עוד יותר את התוצאות. האפשרות הזו לא יכולה להיות true לנכסים שהסוג שלהם הוא אובייקט ו-isReturnable חייב להיות True כדי להגדיר את האפשרות הזו. לבסוף, האפשרות הזו נתמכת רק במאפיינים טיפוסים בני מנייה (enum), ערך בוליאני (enum) ומאפיין טקסט. לדוגמה, בסכימה לדוגמה שלנו יכול להיות שנהפוך את genre, actorName, userRating, ו-mpaaRating לטבלת הפנים כדי לאפשר שימוש בהם למיקוד אינטראקטיבי של תוצאות החיפוש.
  • isWildcardSearchable מציין שמשתמשים יכולים לבצע חיפוש עם תווים כלליים לחיפוש בנכס הזה. האפשרות הזו זמינה רק בנכסי טקסט. האופן שבו פועל החיפוש עם תווים כלליים בשדה הטקסט תלוי בערך שהוגדר בשדה exactMatchWithOperator. אם המדיניות exactMatchWithOperator מוגדרת ל-true, ערך הטקסט עובר המרה לאסימון בתור ערך אטומי אחד, ובמסגרתו מתבצע חיפוש עם תווים כלליים לחיפוש. לדוגמה, אם ערך הטקסט הוא science-fiction, שאילתת עם תו כללי לחיפוש science-* תתאים לו. אם קובעים במדיניות exactMatchWithOperator את הערך false, ערך הטקסט עובר המרה לאסימונים ומבוצע חיפוש עם תווים כלליים לחיפוש לכל אסימון. לדוגמה, אם ערך הטקסט הוא "science-science", שאילתות התו הכללי 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. כל עוד שני המאפיינים האלה הם text (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 בסכימה לדוגמה:

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

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

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

כוונון הסכימה

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

הכרת מגבלות הגודל

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

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

השלבים הבאים

אלה כמה מהשלבים הבאים שתוכלו לבצע:

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

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

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

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

  5. צור מחבר.