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

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

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

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

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

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

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

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