חיפוש אובייקטים של נתונים

מטרת Search API היא למצוא אובייקטים של נתונים שדומים לשאילתה נתונה ולהחזיר רשימה של תוצאות מדורגות (לפי מידת הדמיון). ה-API של חיפוש תומך גם בסינון.

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

חיפוש וקטורי מאפשר לכם לספק וקטור שאילתה משלכם. זוהי השיטה הנדרשת לחיפוש שדות הטמעה שלא כוללים embedding-config. אם מספקים כמה שדות vector_search, התוצאות משולבות באמצעות משקלים שווים.

בדוגמה הבאה מוסבר איך לבצע חיפוש וקטורי באוסף עם המזהה COLLECTION_ID.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫COLLECTION_ID: המזהה של האוסף.
  • ‫LOCATION: האזור שבו משתמשים ב-Agent Platform.
  • ‫PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .

ה-method של ה-HTTP וכתובת ה-URL:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

תוכן בקשת JSON:

{
  "vector_search": {
    "search_field": "plot_embedding",
    "vector": {
      "values": [
        0.42426406871192845,
        0.565685424949238,
        0.7071067811865475
      ]
    },
    "filter": {
      "genre": {
        "$eq": "Thriller"
      }
    },
    "top_k": 5,
    "output_fields": {
      "data_fields": "*",
      "vector_fields": "*",
      "metadata_fields": "*"
    }
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "results": [
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1",
        "createTime": "2026-01-31T20:05:06Z",
        "updateTime": "2026-02-02T13:59:24Z",
        "data": {
          "year": 1991,
          "title": "The Silence of the Lambs",
          "director": "Jonathan Demme",
          "genre": "Thriller"
        },
        "vectors": {
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.697
    },
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2",
        "createTime": "2026-02-04T14:35:29Z",
        "updateTime": "2026-02-04T14:37:29Z",
        "data": {
          "year": 1995,
          "title": "Se7en",
          "director": "David Fincher",
          "genre": "Thriller"
        },
        "vectors": {
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.75
    }
  ]
}

gcloud

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • ‫SEARCH_VECTOR_FILE: הנתיב המקומי לקובץ JSON שמכיל את הווקטור הדחוס או הדליל לחיפוש.

    דוגמה לתוכן של קובץ וקטור צפוף:

    {
      "dense": {
        "values": [
          0.42426406871192845,
          0.565685424949238,
          0.7071067811865475
        ]
      }
    }

    דוגמה לתוכן של קובץ וקטור דליל:

    {
      "sparse": {
        "indices": [1, 5, 10],
        "values": [0.1, 0.5, 0.21]
      }
    }
  • ‫COLLECTION_ID: המזהה של האוסף.
  • ‫LOCATION: האזור שבו משתמשים ב-Agent Platform.
  • ‫PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud vector-search collections data-objects search \
  --vector-search-field="plot_embedding" \
  --vector-from-file=SEARCH_VECTOR_FILE \
  --json-filter='{"genre": {"$eq": "Thriller"}}' \
  --top-k=5 \
  --output-data-fields='*' \
  --output-vector-fields='*' \
  --output-metadata-fields='*' \
  --collection=COLLECTION_ID \
  --location=LOCATION \
  --project=PROJECT_ID

‏Windows (PowerShell)

gcloud vector-search collections data-objects search `
  --vector-search-field="plot_embedding" `
  --vector-from-file=SEARCH_VECTOR_FILE `
  --json-filter='{"genre": {"$eq": "Thriller"}}' `
  --top-k=5 `
  --output-data-fields='*' `
  --output-vector-fields='*' `
  --output-metadata-fields='*' `
  --collection=COLLECTION_ID `
  --location=LOCATION `
  --project=PROJECT_ID

Windows‏ (cmd.exe)

gcloud vector-search collections data-objects search ^
  --vector-search-field="plot_embedding" ^
  --vector-from-file=SEARCH_VECTOR_FILE ^
  --json-filter='{"genre": {"$eq": "Thriller"}}' ^
  --top-k=5 ^
  --output-data-fields='*' ^
  --output-vector-fields='*' ^
  --output-metadata-fields='*' ^
  --collection=COLLECTION_ID ^
  --location=LOCATION ^
  --project=PROJECT_ID

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

---
dataObject:
  createTime: '2026-01-31T20:05:06Z'
  data:
    director: Jonathan Demme
    genre: Thriller
    title: The Silence of the Lambs
    year: 1991
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1
  updateTime: '2026-02-02T13:59:24Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.697
---
dataObject:
  createTime: '2026-02-04T14:35:29Z'
  data:
    director: David Fincher
    genre: Thriller
    title: Se7en
    year: 1995
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2
  updateTime: '2026-02-04T14:37:29Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.75

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.1, 0.2, 0.3]},
    filter={"genre": {"$eq": "Thriller"}},
    top_k=5,
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

שיפור הדיוק והביצועים של החיפוש

בחיפושים וקטוריים באינדקסים צפופים של ANN עם יותר מ-100,000 הטמעות, Agent Retrieval מנסה כברירת מחדל לספק איזון אופטימלי בין היזכרות לבין זמן אחזור. כדי להתאים את האיזון הזה לתרחיש לדוגמה שלכם, אתם יכולים לציין שיעור היזכרות יעד.

הערכים צריכים להיות גדולים מ-0.00 או שווים לו, וקטנים מ-1.00 או שווים לו.

מידע על יצירת אינדקס ANN זמין במאמר בנושא יצירת אינדקס ANN.

בדוגמה הבאה אפשר לראות איך מבצעים חיפוש וקטורי במדד ANN צפוף עם שיעור היזכרות יעד של 0.95.

REST

ה-method של ה-HTTP וכתובת ה-URL:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

תוכן בקשת JSON:

{
  "vectorSearch": {
    "searchField": "plot_embedding",
    "vector": {
      "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
    },
    "topK": 10,
    "searchHint": {
      "indexHint": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/indexes/INDEX_ID",
        "denseScannParams": {
          "targetRecall": 0.95
        }
      }
    },
    "outputFields": {
      "dataFields": "*",
      "vectorFields": "*",
      "metadataFields": "*"
    }
  }
}

gcloud

שומרים את וקטור השאילתה בקובץ JSON, לדוגמה vector.json:

{
  "dense": {
    "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
  }
}

מריצים את הפקודה gcloud vector-search collections data-objects search:

gcloud vector-search collections data-objects search \
    --project=PROJECT_ID \
    --location=LOCATION \
    --collection=COLLECTION_ID \
    --vector-search-field=plot_embedding \
    --vector-from-file=vector.json \
    --use-index=INDEX_ID \
    --dense-scann-target-recall=0.95 \
    --top-k=10

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

collection = "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID"

# Set the target recall rate on the index hint
search_hint = vectorsearch_v1.SearchHint(
    index_hint=vectorsearch_v1.SearchHint.IndexHint(
        name=f"{collection}/indexes/INDEX_ID",
        dense_scann_params=vectorsearch_v1.SearchHint.IndexHint.DenseScannParams(
            target_recall=0.95,
        ),
    ),
)

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]},
    top_k=10,
    search_hint=search_hint,
    output_fields=vectorsearch_v1.OutputFields(
        data_fields=["*"],
        vector_fields=["*"],
        metadata_fields=["*"],
    ),
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent=collection,
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

החיפוש הזה מתבצע בטקסט מלא ללא וקטורים דלילים. בניב ברירת המחדל של שאילתת 'מילה', המערכת מתייחסת לכל הקלט כמונחי חיפוש נפרדים עם אופרטור AND מרומז. אפשר להגדיר את enhanced_query ל-true כדי להרחיב את מונחי החיפוש, לטפל בשינויים במילים, להסיר מילות קישור ולאפשר שימוש בפעולות חיפוש נוספות:

  • ‫OR: אופרטור של הפרדה שתלוי באותיות רישיות, שמתאים למסמכים שמכילים לפחות אחד מהמונחים שצוינו. ההגדרה הזו רלוונטית רק לשני המונחים הסמוכים.

  • ": (מירכאות כפולות) לחיפוש של צירוף מילים.

  • ‫-: אופרטור השלילה. היא לא כוללת מסמכים שמכילים מונחים שמופיעים לפני המיקום שלה.

ממשק ה-API של Agent Retrieval לחיפוש טקסט מאפשר לכם לבצע חיפושי טקסט באמצעות שאילתות מובנות שמכילות שאילתות משנה אחת או יותר, וכך:

  • התאמה לשדות ספציפיים של אובייקטים של נתונים.

  • מציינים את סוג ההתאמה לביצוע:

    • לכל מונח, לא תלוי-רישיות

    • בדיוק, תלוי אותיות רישיות

  • כוללים שיפורים לכל שפה כדי להתאים לגרסאות נגזרות של מונחים, למילים נרדפות, לאיות שגוי ולמילות עצירה (כמו 'a',‏ 'an' ו-'the').

  • אפשר להשתמש באופרטורים הבוליאניים AND,‏ OR ו-NOT כדי לשלב שאילתות משנה.

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

  • הגדלת התרומה של ציון האופטימיזציה לדירוגים.

יש שלושה סוגים של שאילתות משנה:

  • ‫Text: מספק את טקסט החיפוש ושדה אחד או יותר להתאמה.

  • ‫Unary: מחיל פעולת NOT על שאילתת משנה אחת.

  • ‫Combined (משולב): מחיל את האופרטור AND או OR כדי לשלב שאילתות משנה, ואפשר להשתמש בו כדי לקבץ שאילתות משנה משולבות אחרות כדי לשלוט בסדר ההערכה.

בדוגמאות שבדף הזה נעשה שימוש בקולקציה שמוצגת בטבלה הבאה. הוא מכיל שישה אובייקטים של נתונים ומגדיר את השדות הבאים בסכימת הנתונים שלו: המחרוזות ID,‏ Title,‏ Description ומערך המחרוזות Keywords.

מזהה כותרת תיאור מילות מפתח
1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף
2 Lazy Dog Days הכלב החום ישן. מבוית, חיית מחמד, בית, כלב, רגוע, עצלן, צייתן
3 Fox vs Dog השועל הזריז מתחכם לכלב. wild, domestic, conflict, caniformia, mammals, interaction
4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant
5 סיפור שועלי הכלב קופץ לגובה. cunning, jumps
6 הימים העצלנים שלי בקיץ סיפור קצר על הרפיה במהלך חופשת הקיץ. קיץ, רגיעה, חופשה, שמש

שאילתות משנה של טקסט

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

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

"text_search": {
  "structured_query": {
    "text": {
      "text": "fox vs dog"
    }
  }
}

כברירת מחדל, הטקסט מפולח למונחים נפרדים, וכל מונח נבדק בשדות שצוינו. בדוגמה הקודמת, המונחים fox,‏ vs ו-dog מחפשים בשדה Title.

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

  • ‫fields: מערך של שדות להשוואה. אם לא מציינים שדה, ברירת המחדל היא התאמה לכל השדות. השדות מותאמים לאופרטור OR מרומז.

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

  • ‫enhancement: מציין enabled ו-languageCode, ומאפשר לבצע התאמות למילים נרדפות, למילים עם אותיות שורש, לשגיאות כתיב ולמילות קישור בשפה שצוינה עבור languageCode (לדוגמה, en-US). ברירת המחדל היא ללא שיפור.

  • ‫boost: אופציונלי. מכפיל להחלה על הציון של השאילתה. ערך ברירת המחדל הוא 1.0.

סוג התאמה

הפרמטר match_type מציין איך טקסט החיפוש תואם לערך של שדה.

הערך של הפרמטר יכול להיות:

  • ‫EXACT: השדה חייב להיות זהה למונח השאילתה. אם השדה הוא מערך מחרוזות, מתבצעת התאמה לכל רכיב במערך.

בדוגמה הבאה מצוין סוג ההתאמה EXACT:

"text_search": {
  "structured_query": {
    "text": {
      "text": "Fox vs Dog",
      "fields": [ "Title" ],
      "match_type": "EXACT"
    }
  }
}

סוג ההתאמה למערכי מחרוזות

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
1.0000 3 Fox vs Dog השועל הזריז מתחכם לכלב. wild, domestic, conflict, caniformia, mammals, interaction

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

בדוגמה הבאה מוצג אופן החיפוש של הטקסט המדויק wild במערך המחרוזות Keywords:

"text_search": {
  "structured_query": {
    "text": {
      "text": "wild",
      "fields": [ "Keywords" ],
      "match_type": "EXACT"
    }
  }
}

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
1.0000 3 Fox vs Dog השועל הזריז מתחכם לכלב. wild, domestic, conflict, caniformia, mammals, interaction
1.0000 4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant
1.0000 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף

שיפורים בשאילתות

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

הפרמטר הוא אובייקט עם המאפיינים הבאים:

  • ‫enabled: ערך בוליאני שקובע אם להפעיל שיפורים.

  • ‫languageCode: מחרוזת שמציינת את השפה של השיפורים (לדוגמה, en-US).

בדוגמה הבאה מופעלים שיפורים לשפה en-US:

"text_search": {
  "structured_query": {
    "text": {
      "text": {
        "text": "jump",
        "fields": [ "Description" ],
        "queryEnhancement": {
          "enabled": true,
          "languageCode": "en-US"
        }
      }
    }
  }
}

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
0.3419 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף
0.3419 5 סיפור שועלי הכלב קופץ לגובה. cunning, jumps

אם לא צוין ערך ל-queryEnhancement או שהערך של enabled היה false, לא תהיה התאמה.

שאילתות משנה משולבות

שאילתות משולבות מחילות פעולה בוליאנית על שתי שאילתות משנה או יותר. הפעולות הנתמכות הן AND ו-OR.

לשאילתות משולבות יש את המאפיינים הבאים:

  • ‫op: האופרטור הבוליאני שיחול על שאילתות המשנה. הערך יכול להיות AND או OR.

  • ‫subQueries: מערך של שאילתות משנה לשילוב. אלה יכולים להיות כל סוגי שאילתות המשנה הנתמכים, כולל שאילתות משולבות אחרות. עומק ההיררכיה המקסימלי הוא 2.

    • ‫boost: אופציונלי. מכפיל להחלה על הציון של השאילתה. ערך ברירת המחדל הוא 1.0.

צירוף (AND)

האופרטור AND מתאים לאובייקטים של נתונים שמכילים את התנאים של כל שאילתות המשנה.

בדוגמה הבאה אפשר לראות איך משלבים שלוש שאילתות טקסט באמצעות האופרטור AND:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

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

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
‫5.0587 4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant
‫5.0587 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף

כששאילתת משנה של טקסט כוללת כמה שדות להתאמה, מוחל OR מרומז, כמו בדוגמה הבאה:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

בדוגמה הקודמת:

  • שאילתת המשנה הראשונה מתאימה למונח Brown שלא תלוי באותיות רישיות בשדה Title או בשדה Description.

  • שאילתת המשנה השנייה מחפשת את המונח quick בשדה Description, ללא הבחנה בין אותיות רישיות לאותיות קטנות.

  • שאילתת המשנה השלישית מתאימה למונחים forest ו-predator, ללא הבחנה בין אותיות רישיות לאותיות קטנות, בכל אחד מהערכים בשדה Keywords של מערך המחרוזות.

  • אם כל שלוש שאילתות המשנה תואמות, מתבצעת התאמה בשאילתה המשולבת.

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
6.3176 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף
‫5.0587 4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant

איחוד (OR)

האופרטור OR מתאים לאובייקטים של נתונים שמכילים את התנאים של לפחות אחת משאילתות המשנה.

בדוגמה הבאה אפשר לראות איך משלבים שלוש שאילתות טקסט באמצעות האופרטור OR:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

בדוגמה, מתבצעת התאמה אם יש התאמה לאחת משלוש שאילתות המשנה.

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
6.3176 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף
‫5.0587 4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant

קיבוץ

אפשר להטמיע שאילתות משנה משולבות בתוך שאילתות משנה משולבות אחרות כדי לשלוט בסדר ההערכה.

בדוגמה הבאה אפשר לראות איך מקבצים שאילתות משנה:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "combine": {
            "op": "OR",
            "subQueries": [
              {
                "text": {
                  "text": "Fox",
                  "fields": [ "Title" ]
                }
              },
              {
                "text": {
                  "text": "jumps",
                  "fields": [ "Description" ]
                }
              }
            ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "domestic",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

הדוגמה הקודמת שקולה לדוגמה הבאה: (Fox לא תלוי רישיות ב-Title או jumps לא תלוי רישיות ב-Description) וגם לא domestic לא תלוי רישיות באף אחד מהרכיבים Keywords.

בטבלה הבאה מוצגות תוצאות השאילתה:

Score מזהה כותרת תיאור מילות מפתח
3.5178 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף
2.2589 5 סיפור שועלי הכלב קופץ לגובה. cunning, jumps

שאילתות משנה אונריות

שאילתות משנה אונאריות מחילות פעולה בוליאנית על שאילתת משנה אחת בשאילתה מובנית. האופרטור NOT הוא האופרטור האונרי היחיד שנתמך.

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

  • ‫op: האופרטור הבוליאני שרוצים להחיל על שאילתת המשנה. הערך יכול להיות NOT.

  • ‫subQuery: שאילתת המשנה שאליה רוצים להחיל את הפעולה האונרית.

    • ‫boost: אופציונלי. מכפיל להחלה על הציון של השאילתה. ערך ברירת המחדל הוא 1.0.

שלילה (NOT)

האופרטור NOT מתאים לאובייקטים של נתונים שלא מכילים את התנאים של שאילתת המשנה.

בדוגמה הבאה אפשר לראות איך משתמשים באופרטור NOT:

"text_search": {
  "structured_query": {
    "unary": {
      "op": "NOT",
      "subQuery": {
        "text": {
          "text": "dog",
          "fields": [ "Description" ]
        }
      }
    }
  }
}

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
1.000 4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant
1.000 6 הימים העצלנים שלי בקיץ סיפור קצר על הרפיה במהלך חופשת הקיץ. קיץ, רגיעה, חופשה, שמש

כשמחילים את האופרטור NOT על מערך מחרוזות, הוא מתאים לאובייקט נתונים אם המונח לא נכלל באף אחד מהרכיבים של המערך.

בדוגמה, יש התאמה אם המונח orange (לא תלוי אותיות רישיות) לא נכלל באף רכיב במערך המחרוזות Keywords.

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "orange",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
‪6.0587 4 דובים חומים תנועות מהירות ביער. wild, forest, ursine, apex predator, hibernation, giant

הגברה

לכל שאילתת משנה יכול להיות פרמטר boost כדי להחיל מכפיל על הניקוד של שאילתת המשנה. כברירת מחדל, לכל שאילתות המשנה יש boost של 1.0.

בדוגמה הבאה אפשר לראות איך מגדילים את המשקל של שאילתת משנה:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "fox",
            "fields": [ "Title" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "jumps",
            "fields": [ "Description" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "interaction",
            "fields": [ "Keywords" ]
          },
          "boost": 5.0
        }
      ]
    }
  }
}

תוצאות השאילתה מוצגות בטבלה הבאה:

Score מזהה כותרת תיאור מילות מפתח
7.5534 3 Fox vs Dog השועל הזריז מתחכם לכלב. wild, domestic, conflict, caniformia, mammals, interaction
2.5178 1 The Quick Brown Fox שועל חום מהיר קופץ בקלות מעל כלב עצלן. פראי, יער, יונק, כתום, זריזות, טורף
1.2589 5 סיפור שועלי הכלב קופץ לגובה. cunning, jumps

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

אפשר להשתמש ב-batch_search_data_objects כדי להריץ כמה חיפושים במקביל (חיפוש וקטורי, חיפוש טקסט וחיפוש סמנטי). אפשר לשלב את התוצאות ולדרג אותן באמצעות ReciprocalRankFusion Ranker, שממזג קבוצות של תוצאות באמצעות האלגוריתם Reciprocal Rank Fusion (RFF).