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

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

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

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

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

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

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

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

הפרשנות שמתקבלת היא: actor:"tom hanks" genre:action objecttype:movies

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

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

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

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

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

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

{
  "objectDefinitions": [{
    "name": "movie",
    "options": {
      "displayOptions": { "objectDisplayLabel": "Films" }
    },
    "propertyDefinitions": [{
      "name": "genre",
      "isReturnable": true,
      "textPropertyOptions": {
        "operatorOptions": { "operatorName": "genre" }
      },
      "displayOptions": { "displayLabel": "Category" }
    }]
  }]
}

השמות המוצגים האלה מאפשרים פרשנויות כמו:

  • ‫"action movies" -> genre:action object:movies
  • ‫"movies with genre action or thriller" -> objecttype:movies genre:(action OR thriller)
  • ‫"comedy category movies" (סרטים בקטגוריה קומדיה) -> genre:comedy objecttype:movies

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

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

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

{
  "objectDefinitions": [{
    "propertyDefinitions": [
      {
        "name": "runtime",
        "isSortable": true,
        "integerPropertyOptions": {
          "operatorOptions": {
            "operatorName": "runtime",
            "lessThanOperatorName": "runtimelessthan",
            "greaterThanOperatorName": "runtimegreaterthan"
          }
        }
      },
      {
        "name": "releasedate",
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "releasedate",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

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

  • ‫"movies released this year" -> objecttype:movies releasedafter:2019-1-1 releasedbefore:2019-12-31
  • ‫"movies with runtime less than 90" -> objecttype:movies runtimelessthan:90

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

שימוש באופרטורים מובנים כמו type,‏ before,‏ after ו-objecttype:

  1. כדי להשתמש ב-before וב-after, צריך לאכלס את updateTime ב-ItemMetadata.
  2. מאכלסים את mimeType ב-ItemMetadata לצורך זיהוי אוטומטי. לדוגמה, אם מחפשים 'סרטוני פעולה', המערכת תציג מסמכים עם סוגי MIME של סרטונים.

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

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