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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

איור 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 – מציין שאפשר להשתמש בנכס למיון. הזה הוא לא יכול להיות TRUE עבור מאפיינים שחוזרים על עצמם. לדוגמה, תוצאות של סרטים ממוין לפי תאריך פרסום או לפי דירוג קהל.
  • isFacetable – מציין שניתן להשתמש בנכס ליצירת מאפיינים. מאפיין מסוים משמש לצמצום תוצאות החיפוש שבהן המשתמש רואה את התוצאות הראשוניות, ולאחר מכן מוסיף קריטריונים או מאפיינים כדי לצמצם אותם עוד יותר. תוצאות. אפשרות זו אינה יכולה להיות נכונה עבור מאפיינים שהסוג שלהם הוא אובייקט כדי להגדיר את האפשרות הזו, הערך של isReturnable צריך להיות True. לבסוף, האפשרות הזו נתמך במאפיינים 'טיפוסים בני מנייה (enum)', 'בוליאני' ו'טקסט'. לדוגמה, בסכימה לדוגמה שלנו, אנחנו עשויים ליצור טבלת הפנים של 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 מציין שהסרט title הוא מסוג טקסט. בקטע הקוד הבא מוצג הנכס 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' לכותר סרט, שם האופרטור צריך להיות מוגדר ל'שם'.

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

{
  "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 כדי לבדוק את תוקף הסכימה ללא ברישום שלו בפועל.

הוספת הנתונים לאינדקס

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

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

כדי ליצור ממשק חיפוש לאימות שאילתות חיפוש, ממשק החיפוש

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

בדיקה באמצעות שאילתה כללית

שאילתה גנרית מחזירה את כל הפריטים במקור הנתונים שמכילים פריט ספציפי String. באמצעות ממשק חיפוש, תוכל להריץ שאילתה כללית על סרט מקור נתונים באמצעות הקלדת המילה "titanic" והקשה על Return. הכול סרטים עם המילה "טיטאניק" בתוצאות החיפוש.

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

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

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

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

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

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

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