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

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

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

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

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

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

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

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

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

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

הפעלה של פירוש אופרטור שמור

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

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

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