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?
- Pelajari cara menelusuri Objek Data.