סינון חיפוש בהתאמה אישית של נתונים מובְנים או לא מובְנים (מאמר שמתייחס לגרסה קודמת)

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

לפני שמתחילים

מוודאים שיצרתם אפליקציה והטמעתם נתונים מובְנים או נתונים לא מובְנים עם מטא-נתונים. מידע נוסף זמין במאמר בנושא יצירת אפליקציית חיפוש.

דוגמה למטא-נתונים

כדאי לעיין בדוגמה הזו של מטא-נתונים לארבעה קובצי PDF ‏ (document_1.pdf,‏ document_2.pdf,‏ document_3.pdf ו-document_4.pdf). המטא-נתונים האלה יהיו בקובץ JSON בקטגוריה של Cloud Storage, יחד עם קובצי ה-PDF. אתם יכולים לחזור לדוגמה הזו בזמן שאתם קוראים את הדף.

{"id": "1", "structData": {"title": "Policy on accepting corrected claims", "category": ["persona_A"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_1.pdf"}}
{"id": "2", "structData": {"title": "Claims documentation and reporting guidelines for commercial members", "category": ["persona_A", "persona_B"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_2.pdf"}}
{"id": "3", "structData": {"title": "Claims guidelines for bundled services and supplies for commercial members", "category": ["persona_B", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_3.pdf"}}
{"id": "4", "structData": {"title": "Advantage claims submission guidelines", "category": ["persona_A", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_4.pdf"}}

תחביר של ביטוי סינון

חשוב לוודא שאתם מבינים את התחביר של ביטוי הסינון שבו תשתמשו כדי להגדיר את מסנן החיפוש. אפשר לסכם את התחביר של ביטוי המסנן באמצעות Extended Backus–Naur form (צורה מורחבת של Backus–Naur):

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };
  # Expressions can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthetical expression.
    | "(", expression, ")"
    # A simple expression applying to a text field.
    # Function "ANY" returns true if the field exactly matches any of the literals.
    ( text_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # A simple expression applying to a numerical field. Function "IN" returns true
    # if a field value is within the range. By default, lower_bound is inclusive and
    # upper_bound is exclusive.
    | numerical_field, ":", "IN", "(", lower_bound, ",", upper_bound, ")"
    # A simple expression that applies to a numerical field and compares with a double value.
    | numerical_field, comparison, double
    # An expression that applies to a geolocation field with text/street/postal address.
    |  geolocation_field, ":", "GEO_DISTANCE(", literal, ",", distance_in_meters, ")"
    # An expression that applies to a geolocation field with latitude and longitude.
    | geolocation_field, ":", "GEO_DISTANCE(", latitude_double, ",", longitude_double, ",", distance_in_meters, ")"
    # Datetime field
    | datetime_field, comparison, literal_iso_8601_datetime_format);
  # A lower_bound is either a double or "*", which represents negative infinity.
  # Explicitly specify inclusive bound with the character 'i' or exclusive bound
  # with the character 'e'.
  lower_bound = ( double, [ "e" | "i" ] ) | "*";
  # An upper_bound is either a double or "*", which represents infinity.
  # Explicitly specify inclusive bound with the character 'i' or exclusive bound
  # with the character 'e'.
  upper_bound = ( double, [ "e" | "i" ] ) | "*";
  # Supported comparison operators.
  comparison = "<=" | "<" | ">=" | ">" | "=";
  # A literal is any double quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double quoted string;
  text_field = text field - for example, category;
  numerical_field = numerical field - for example, score;
  geolocation_field = field of geolocation data type - for example home_address, location;
  datetime_field = field of datetime data type - for example creation_date, expires_on;
  literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.

חיפוש באמצעות מסנן מטא-נתונים

כדי לחפש באמצעות מסנן מטא-נתונים, פועלים לפי השלבים הבאים:

  1. בוחרים את שדה המטא-נתונים שבו רוצים להשתמש כדי לסנן את שאילתות החיפוש. לדוגמה, במטא-נתונים שבקטע לפני שמתחילים, אפשר להשתמש בשדה category כמסנן חיפוש. המשתמשים יכולים לסנן לפי persona_A, ‏persona_B או persona_C, כך שהחיפוש שלהם יוגבל למסמכים שמשויכים לדמות שהם מתעניינים בה.

  2. הופכים את שדה המטא-נתונים לניתן לאינדוקס:

    1. במסוף Google Cloud , עוברים לדף Gemini Enterprise ובתפריט הניווט לוחצים על אפליקציות.

      לדף "אפליקציות"

    2. לוחצים על אפליקציית החיפוש.

    3. בתפריט הניווט, לוחצים על נתונים.

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

    5. לוחצים על Edit.

    6. מסמנים את התיבה Indexable בשדה שרוצים להוסיף לאינדקס.

    7. לוחצים על Save. מידע נוסף זמין במאמר קביעת הגדרות של שדות.

  3. מאתרים את המזהה של מאגר הנתונים. אם כבר יש לכם מזהה של מאגר נתונים, אפשר לדלג לשלב הבא.

    1. במסוף Google Cloud , עוברים לדף Gemini Enterprise ובתפריט הניווט לוחצים על מאגרי נתונים.

      מעבר לדף Data Stores

    2. לוחצים על השם של מאגר הנתונים.

    3. בדף Data (נתונים) של מאגר הנתונים, מעתיקים את מזהה מאגר הנתונים.

  4. תצוגה מקדימה של תוצאות החיפוש.

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "filter": "FILTER"
    }'
    

    מחליפים את מה שכתוב בשדות הבאים:

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

    לדוגמה, נניח שייבאתם את ארבעת קובצי ה-PDF עם המטא-נתונים מהקטע לפני שמתחילים. אתם רוצים לחפש מסמכים שמכילים את המילה "claims", ולשאול רק מסמכים עם ערך category של persona_A. כדי לעשות את זה, צריך לכלול את ההצהרות הבאות בשיחה:

    "query": "claims",
    "filter": "category: ANY(\"persona_A\")"
    

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

    כדי לראות דוגמה לתשובה צריך ללחוץ כאן.

    אם תבצעו חיפוש כמו זה שבתהליך הקודם, תקבלו תשובה דומה לזו: שימו לב שהתגובה כוללת את שלושת המסמכים שערך ה-category שלהם הוא persona_A.

    {
    "results": [
    {
      "id": "2",
      "document": {
        "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/2",
        "id": "2",
        "structData": {
          "title": "Claims documentation and reporting guidelines for commercial members",
          "category": [
            "persona_A",
            "persona_B"
          ]
        },
        "derivedStructData": {
          "link": "gs://bucketname_87654321/data/document_2.pdf",
          "extractive_answers": [
            {
              "pageNumber": "1",
              "content": "lorem ipsum"
            }
          ]
        }
      }
    },
    {
      "id": "1",
      "document": {
        "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/1",
        "id": "1",
        "structData": {
          "title": "Policy on accepting corrected claims",
          "category": [
            "persona_A"
          ]
        },
        "derivedStructData": {
          "extractive_answers": [
            {
              "pageNumber": "2",
              "content": "lorem ipsum"
            }
          ],
          "link": "gs://bucketname_87654321/data/document_1.pdf"
        }
      }
    },
    {
      "id": "4",
      "document": {
        "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/4",
        "id": "4",
        "structData": {
          "title": "Advantage claims submission guidelines",
          "category": [
            "persona_A",
            "persona_C"
          ]
        },
        "derivedStructData": {
          "extractive_answers": [
            {
              "pageNumber": "47",
              "content": "lorem ipsum"
            }
          ],
          "link": "gs://bucketname_87654321/data/document_4.pdf"
        }
      }
    }
    ],
    "totalSize": 330,
    "attributionToken": "UvBRCgsI26PxpQYQs7vQZRIkNjRiYWY1MTItMDAwMC0yZWIwLTg3MTAtMTQyMjNiYzYzMWEyIgdHRU5FUklDKhSOvp0VpovvF8XL8xfC8J4V1LKdFQ",
    "guidedSearchResult": {},
    "summary": {}
    }
    

דוגמאות לביטויי סינון

בטבלה הבאה מוצגות דוגמאות לביטויי סינון.

מסנן התוצאות שמוחזרות הן רק של מסמכים שבהם:
category: ANY(\"persona_A\") שדה הטקסט category הוא persona_A
score: IN(*, 100.0e) השדה המספרי score גדול מאינסוף שלילי וקטן מ-100.0
non-smoking = \"true\" הערך הבוליאני non-smoking הוא true
pet-friendly = \"false\" הערך הבוליאני pet-friendly הוא False
manufactured_date = \"2023\" הערך בשדה manufactured date הוא תאריך כלשהו בשנת 2023
manufactured_date >= \"2024-04-16\" התאריך manufactured_date הוא 16 באפריל 2024 או אחריו
manufactured_date < \"2024-04-16T12:00:00-07:00\" ‫manufactured_date הוא לפני הצהריים לפי שעון הקיץ של החוף המערבי בארה"ב (PDT) ב-16 באפריל 2024
office.location:GEO_DISTANCE(\"1600 Amphitheater Pkwy, Mountain View, CA, 94043\", 500) שדה המיקום הגיאוגרפי office.location נמצא במרחק של 500 מ' מ-1600 Amphitheater Pkwy
NOT office.location:GEO_DISTANCE(\"Palo Alto, CA\", 1000) השדה של המיקום הגיאוגרפי office.location לא נמצא ברדיוס של קילומטר אחד מפאלו אלטו, קליפורניה.
office.location:GEO_DISTANCE(34.1829, -121.293, 500) שדה המיקום הגיאוגרפי office.location נמצא ברדיוס של 500 מטר מקו הרוחב 34.1829 וקו האורך ‎-121.293
category: ANY(\"persona_A\") AND score: IN(*, 100.0e) ‫category הוא persona_A ו-score קטן מ-100
office.location:GEO_DISTANCE(\"Mountain View, CA\", 500) OR office.location:GEO_DISTANCE(\"Palo Alto, CA\", 500) ‫office.location נמצא במרחק של 500 מטרים ממאונטיין ויו או מפלו אלטו.
(price<175 AND pet-friendly = \"true\") OR (price<125 AND pet-friendly = \"false\") המספר price קטן מ-175 ואני יכול/ה להביא את חיית המחמד שלי, או שהמספר price קטן מ-125 ואני לא יכול/ה להביא את חיית המחמד שלי

המאמרים הבאים

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