Sammlungen nach Datenobjekten durchsuchen

Mit der Query API können Sie Datenobjekte aus einer Sammlung mithilfe eines Filters abrufen. Das ist ähnlich wie beim Abfragen einer Datenbanktabelle mit einer SQL-WHERE-Klausel. Sie können die Aggregation auch verwenden, um die Anzahl der Datenobjekte zu ermitteln, die einem Filter entsprechen.

Sprache für Filterausdrücke

Zusätzlich zur KNN-/ANN-Suchfunktion bietet Vector Search 2.0 vielseitige Abfragefunktionen mit einer benutzerdefinierten Abfragesprache. Die Abfragesprache wird in der folgenden Tabelle erläutert.

Filter Beschreibung Unterstützte Datentypen Beispiel
$eq Entspricht Datenobjekten mit Feldwerten, die gleich einem angegebenen Wert sind. Zahl, String, boolescher Wert {"genre": {"$eq": "documentary"}}
$ne Führt zu Übereinstimmung mit Datenobjekten mit Feldwerten, die nicht gleich einem angegebenen Wert sind. Zahl, String, boolescher Wert {"genre": {"$ne": "drama"}}
$gt Führt zu Übereinstimmung mit Datenobjekten mit Feldwerten, die größer als ein angegebener Wert sind. Zahl {"year": {"$gt": 2019}}
$gte Entspricht Datenobjekten mit Feldwerten, die größer oder gleich einem angegebenen Wert sind. Zahl {"year": {"$gte": 2020}}
$lt Führt zu Übereinstimmung mit Datenobjekten mit Feldwerten, die kleiner als ein angegebener Wert sind. Zahl {"year": {"$lt": 2020}}
$lte Entspricht Datenobjekten mit Feldwerten, die kleiner als oder gleich einem angegebenen Wert sind. Zahl {"year": {"$lte": 2020}}
$in Führt zu Übereinstimmung mit Datenobjekten mit Feldwerten, die in einem angegebenen Array enthalten sind. String {"genre": {"$in": ["comedy", "documentary"]}}
$nin Führt zu Übereinstimmung mit Datenobjekten mit Feldwerten, die nicht in einem angegebenen Array enthalten sind. String {"genre": {"$nin": ["comedy", "documentary"]}}
$and Verknüpft Abfrageklauseln mit einem logischen AND. - {"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
$oder Verknüpft Abfrageklauseln mit einem logischen OR. - {"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
$all Wählt die Dokumente aus, in denen der Arraywert eines Felds alle angegebenen Werte enthält. - {"colors": {"$all": ["red", "blue"]}}

Sammlungen abfragen

Das folgende Beispiel zeigt, wie Sie mit einem Filter nach Datenobjekten in einer Sammlung mit der ID COLLECTION_ID suchen.

REST

# Query Data Objects
curl -X POST \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:query' \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H 'Content-Type: application/json' \
  -d '{
    "page_size": 10,
    "page_token": "",
    "filter": {
      "$or": [
        {
          "director": {
            "$eq": "Akira Kurosawa"
          }
        },
        {
          "$and": [
            {
              "director": {
                "$eq": "David Fincher"
              }
            },
            {
              "genre": {
                "$ne": "Thriller"
              }
            }
          ]
        }
      ]
    },
    "output_fields": {
      "data_fields": "*",
      "vector_fields": "*",
      "metadata_fields": "*"
    }
  }'

Python

from google.cloud import vectorsearch_v1beta

# Create the client
data_object_search_service_client = vectorsearch_v1beta.DataObjectSearchServiceClient()

# Initialize request
request = vectorsearch_v1beta.QueryDataObjectsRequest(
    parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
    filter={
        "$or": [
            {"director": {"$eq": "Akira Kurosawa"}},
            {
                "$and": [
                    {"director": {"$eq": "David Fincher"}},
                    {"genre": {"$ne": "Thriller"}},
                ]
            },
        ]
    },
)

# Make the request
page_result = data_object_search_service_client.query_data_objects(request=request)

# Handle the response
for response in page_result:
    print(response)

Um eine Aggregation durchzuführen, verwenden Sie den Endpunkt aggregate und geben den Aggregationstyp im Anfragetext an.

Im folgenden Beispiel wird gezeigt, wie alle Datenobjekte in einer Sammlung mit der ID COLLECTION_ID gezählt werden.

REST

curl -X POST \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:aggregate' \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H 'Content-Type: application/json' \
  -d '{
    "aggregate": "count"
  }'

Python

from google.cloud import vectorsearch_v1beta

# Create the client
data_object_search_service_client = vectorsearch_v1beta.DataObjectSearchServiceClient()

# Initialize request
request = vectorsearch_v1beta.AggregateDataObjectsRequest(
    parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
    aggregate="COUNT",
)

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

# Handle the response
print(response)

Nächste Schritte