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

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

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

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

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

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

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

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

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

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

  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 'סרט'.

  • הגדרת המאפיין genre כוללת את הערכים operatorName ו-displayLabel.

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

  • 'סרטים פעולה', 'סרטים מסוג ז'אנר פעולה' או 'סרטים ז'אנר פעולה' מפורשים בתור genre:action object:movies.
  • 'סרטים בז'אנר פעולה או מתח' מפורשים בתור objecttype:movies genre:(action OR thriller).
  • 'סרט פעולה' או 'סרטים פעולה' מפורשים בתור 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
  • 'סרטים עם משך זמן קצר מ-90' מפורשים כ-objjecttype: movies runtimelessthan:90.
  • בהנחה שהשנה היא 2019, הביטוי "סרטים שיצאו השנה באורך של יותר מ-120 דקות" מפורש כ-releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • הפקודה 'sort movies by release date' תסנן לפי 'objecttype: movies', והתוצאות שיוצגו ימוינו לפי תאריך הפרסום, בסדר עולה כברירת מחדל.

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

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

  1. כדי להשתמש באופרטור before ובאופרטור after, ממלאים את השדה updateTime ב-ItemMetadata. ההגדרות האלה מאפשרות ל-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 (כל המסמכים עוברים בירושה את רשימת ה-ACL מאותו פריט מאגר) בלי שהוגדר קורא נוסף.
  • אם למספר אופרטורים של סכימה יש אותו ערך, הפרשנות של הערך הזה ככוונת האופרטור לשאילתה תלויה בגורם האמון הכולל שמוחזר על ידי מערכת הפרשנות של השאילתות. לדוגמה, נניח שיש לכם את המאפיינים priority ו-severity עם אותם שמות של אופרטורים שמוגדרים בסכימה. נניח שלשני האופרטורים יכולים להיות הערכים 0,‏ 1,‏ 2 או 3. בדוגמה הזו, הערך '0' בשאילתה יכול להתייחס לערך האופרטור של priority או של severity. הערכים האלה מעורפלים ורמת הוודאות נמוכה יותר.
  • כברירת מחדל, כשמערכת Cloud Search מפרשת שאילתות, היא משביתה את רישיון ההקלדה של ערכי השדות, מלבד אופרטורי הטקסט שמוגדרים עם האפשרויות exactMatchWithOperator.
  • האופרטור source לא נתמך בשאילתות.
  • שאילתות שמשלבות מונחים מבוססי-אופרטורים ומונחים בטקסט חופשי לא מנותחות. לדוגמה, השאילתה 'p0 priority cases severity:s0' לא תקבל תמיכה כי 'p0 priority cases' הוא מונח טקסט חופשי, ואילו 'severity:s0' הוא מונח מבוסס-אופרטור.
  • אסטרטגיית הפרשנות של השאילתות תמיד משלבת בין התוצאות המפוענחות לבין התוצאות הרגילות (לא מפוענחות, מדורגות לפי רלוונטיות). הוא לא מבצע החלפה מלאה של הדף בתוצאות.