Mengkueri Koleksi untuk Objek Data

Tujuan Query API adalah untuk mengambil Objek Data dari Koleksi menggunakan filter. Hal ini mirip dengan membuat kueri tabel database dan menggunakan klausa WHERE SQL. Anda juga dapat menggunakan agregasi untuk mendapatkan jumlah Objek Data yang cocok dengan filter.

Bahasa ekspresi filter

Selain fungsi penelusuran KNN/ANN, Vector Search 2.0 menyediakan kemampuan kueri serbaguna menggunakan bahasa kueri kustom. Bahasa kueri dijelaskan dalam tabel berikut.

Filter Deskripsi Jenis yang Didukung Contoh
$eq Mencocokkan Objek Data dengan nilai kolom yang sama dengan nilai yang ditentukan. Angka, string, boolean {"genre": {"$eq": "documentary"}}
$ne Mencocokkan Objek Data dengan nilai kolom yang tidak sama dengan nilai yang ditentukan. Angka, string, boolean {"genre": {"$ne": "drama"}}
$gt Mencocokkan Objek Data dengan nilai kolom yang lebih besar dari nilai yang ditentukan. Angka {"year": {"$gt": 2019}}
$gte Mencocokkan Objek Data dengan nilai kolom yang lebih besar dari atau sama dengan nilai yang ditentukan. Angka {"year": {"$gte": 2020}}
$lt Mencocokkan Objek Data dengan nilai kolom yang kurang dari nilai yang ditentukan. Angka {"year": {"$lt": 2020}}
$lte Mencocokkan Objek Data dengan nilai kolom yang kurang dari atau sama dengan nilai yang ditentukan. Angka {"year": {"$lte": 2020}}
$in Mencocokkan Objek Data dengan nilai kolom yang ada di array tertentu. String {"genre": {"$in": ["comedy", "documentary"]}}
$nin Mencocokkan Objek Data dengan nilai kolom yang tidak ada di array tertentu. String {"genre": {"$nin": ["comedy", "documentary"]}}
$and Menggabungkan klausa kueri dengan AND logis. - {"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
$atau Menggabungkan klausa kueri dengan OR logis. - {"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
$all Memilih dokumen yang nilai array kolomnya berisi semua nilai yang ditentukan. - {"colors": {"$all": ["red", "blue"]}}

Membuat Kueri Koleksi

Contoh berikut menunjukkan cara menggunakan filter untuk membuat kueri Objek Data dalam Koleksi dengan ID COLLECTION_ID.

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)

Untuk melakukan agregasi, Anda menggunakan endpoint aggregate dan menentukan jenis agregasi dalam isi permintaan.

Contoh berikut menunjukkan cara menghitung semua Objek Data dalam Koleksi dengan ID COLLECTION_ID.

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)

Apa langkah selanjutnya?