מבנה של סכימה לצורך פרשנות אופטימלית של שאילתות

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

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

פרשנות לדוגמה של שאילתה

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

סקירה כללית של פירוש שאילתות
איור 1. פירוש השאילתה

בהינתן השאילתה לדוגמה הזו, פרשנות השאילתה מבצעת את הפעולות הבאות:

  • מנתח את הסכמה וקובע שהאובייקטים ברמה העליונה במקור הנתונים מסווגים כ-objecttype:movies. הפרשנות של השאילתה יודעת עכשיו ש'סרטים' בשאילתה הוא סוג אובייקט.

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

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

  actor:tom hanks genre:action objecttype:movies

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

מבנה הסכימה צריך לתמוך בפירוש שאילתות

כדאי לבנות את הסכימה כך שתוכלו ליהנות מפרשנות של שאילתות.

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

הפרשנות של השאילתות ב-Cloud Search מתבססת על objectDefinitions ועל propertyDefinitions בסכימה, כדי לפרש את השאילתה של המשתמש ולשפר את התוצאות. כדי להפיק את המרב מרכיבי הסכימה האלה, כדאי ליצור שמות מוצגים אינטואיטיביים באמצעות displayLabel לשמות מאפיינים, objectDisplayLabel לשמות אובייקטים ו-operatorName לאופרטורים.

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

{
  "objectDefinitions": [
    {
      "name": "movie",
        "options": {
          "displayOptions": {
          "objectDisplayLabel": "Films"
        }
        ...
      },
      "propertyDefinitions": [
        {
          "name": "genre",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": {
            "operatorName": "genre"
          }
        },
        "displayOptions": {
          "displayLabel": "Category"
        }
      },
      ...
      ]
    }
  ]
}

בדוגמה הקודמת:

  • להגדרת אובייקט הסרט יש objectDisplayLabel Film.

  • המאפיין genreDefinition כולל את הערכים operatorNamegenre ו-displayLabelCategory.

השמות המוצגים האלה מאפשרים ל-Cloud Search לפרש את השאילתות הבאות:

  • המחרוזות 'סרטי פעולה', 'סרטים מסוג פעולה' או 'סרטים מסוג פעולה' מתפרשות כ-genre:action object:movies.
  • ‫"movies with genre action or thriller" (סרטים עם ז'אנר פעולה או מתח) מתפרש כ-objecttype:movies genre:(action OR thriller).
  • ‫“action film” או “action films” מתפרש כ-genre:action objecttype:movies.
  • השאילתה 'סרטים בקטגוריית קומדיה' מפורשת כ-genre:comedy objecttype:movies.

הפעלת פרשנויות של תאריכים, מספרים ומיון

צריך להגדיר את המאפיינים lessThanOperatorName ו-greaterThanOperatorName, שמפורטים בIntegerOperatorOptions, לכל מאפייני התאריך והמספר. ההגדרות האלה מאפשרות פרשנות אוטומטית של תאריכים ומספרים. בנוסף, כדי להפעיל פרשנויות של מיון, צריך להגדיר את האפשרות isSortable למאפיינים מספריים ולמאפיינים של תאריכים. בסכימה הבאה אפשר לראות איך מפעילים את האפשרויות האלה.

{
  "objectDefinitions": [
    {
      "options": {
        "displayOptions": {
          "objectDisplayLabel": "Films"
        }
      },
      "propertyDefinitions": [
        {
          "name": "runtime",
          "isReturnable": true,
          "isSortable": true,
          "integerPropertyOptions": {
            "orderedRanking": "DESCENDING",
            "minimumValue": {
              "value": 10
            },
            "maximumValue": {
              "value": 500
            },
            "operatorOptions": {
              "operatorName": "runtime",
              "lessThanOperatorName": "runtimelessthan",
              "greaterThanOperatorName": "runtimegreaterthan"
            }
          },
          "displayOptions": {
            "displayLabel": "Length"
          }
        },
        {
          "name": "releasedate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "releasedate",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          }
        }
      ]
    }
  ]
}

בדוגמה הקודמת:

  • המאפיין המספרי runtime מתייחס לאורך של סרט. המאפיינים runtimelessthan ו-runtimegreaterthan מוגדרים לנכס הזה.
  • מאפיין התאריך releaseDate מתייחס לתאריך שבו הסרט יוצא לאקרנים. ההגדרה של releasedbefore ושל releasedafter מוגדרת לנכס הזה.

ההגדרות האלה מאפשרות ל-Cloud Search לבצע את הפרשנויות הבאות של שאילתות:

  • בהנחה שהשנה היא 2019, השאילתה 'סרטים שיצאו השנה' מתפרשת כ-objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31.
  • בהנחה שהשבוע הוא השבוע השלישי במרץ, השאילתה 'סרטים שיצאו בשבוע שעבר' מתפרשת כobjecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16
  • ‫'movies with runtime less than 90' (סרטים עם זמן צפייה של פחות מ-90 דקות) מתפרש כ-objjecttype: movies runtimelessthan:90.
  • בהנחה שהשנה היא 2019, השאילתה 'סרטים שיצאו לאקרנים השנה ואורך הסרט יותר מ-120 דקות' מתפרשת כ- releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • 'מיון סרטים לפי תאריך הפרסום' יסנן לפי 'objecttype: movies' והתוצאות שיוצגו ימוינו לפי תאריך הפרסום בסדר מיון עולה כברירת מחדל.

הפעלת פרשנות של אופרטורים שמורים

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

  1. ממלאים את השדה updateTime ב-ItemMetadata כדי להשתמש באופרטורים before ו-after. ההגדרות האלה מאפשרות ל-Cloud Search לפרש את השאילתות הבאות:

    • אם תגידו 'סרטים מהשבוע שעבר', יוצגו כל הסרטים שעודכנו באינדקס בשבוע הקודם.
    • ‫movies before jan 2019 יציג רשימה של כל הסרטים שעברו אינדוקס לפני ינואר 2019.
  2. מאכלסים את השדה mimeType ב-ItemMetadata כדי להשתמש בזיהוי אוטומטי של סוג. שאילתה כמו 'סרטוני פעולה' תציג רשימה של כל המסמכים של סרטי פעולה עם סוג MIME של application/mp4,‏ application/mpeg4,‏ application/x-shockwave-flash,‏ video/ ו-application/vnd.google-apps.video.

מגבלות על פרשנות של שאילתות

לתכונה 'פרשנות השאילתה' יש את המגבלות הבאות.

  • פרשנות השאילתה פועלת רק ברשימות ה-ACL של מקורות הנתונים האלה:
    • כל המסמכים גלויים לכולם בדומיין (כל מי שנמצא בדומיין יכול לגשת אליהם).
    • כל המסמכים הם ציבוריים במקור הנתונים (כל מי שיש לו גישה לרשימת בקרת הגישה של מקור הנתונים).
    • לרוב המסמכים במקור הנתונים יש אותה רשימת ACL (כל המסמכים מקבלים בירושה את רשימת ה-ACL מאותו פריט מאגר) ולא מוגדרים קוראים נוספים.
  • אם לכמה אופרטורים של סכימה יש את אותו ערך, הפרשנות של הערך הזה לגבי כוונת האופרטור בשאילתה תלויה בפקטור הכולל של רמת הביטחון שמוחזר על ידי מערכת פרשנות השאילתות. לדוגמה, נניח שיש לכם את המאפיינים priority ו-severity עם אותם שמות של אופרטורים שמוגדרים בסכימה. נניח ששני האופרטורים יכולים לקבל את הערכים 0, 1, 2 או 3. בדוגמה הזו, הערך '0' בשאילתה יכול להתייחס לערך האופרטור של priority או של severity. הערכים האלה לא חד-משמעיים ורמת הוודאות נמוכה יותר.
  • כברירת מחדל, כש-Cloud Search מפרש שאילתה, הוא משנה את האותיות של ערכי השדות לאותיות קטנות, למעט אופרטורים של טקסט שהוגדרו עם האפשרויות exactMatchWithOperator.
  • האופרטור source לא נתמך בשאילתות.
  • שאילתות שמשלבות בין מונחים שמבוססים על אופרטורים לבין מונחים של טקסט חופשי לא מפורשות. לדוגמה, השאילתה "p0 priority cases severity:s0" לא נתמכת כי "p0 priority cases" הוא מונח טקסט חופשי, בעוד "severity:s0" הוא מונח שמבוסס על אופרטור.
  • אסטרטגיית פירוש השאילתות תמיד משלבת את התוצאות המפורשות עם תוצאות רגילות (לא מפורשות, מדורגות לפי רלוונטיות). היא לא מבצעת החלפה מלאה של התוצאות בדף.