Lo scopo dell'API Query è recuperare oggetti dati da una raccolta
utilizzando un filtro. È simile all'esecuzione di query su una tabella di database e all'utilizzo di una clausola SQL
WHERE. Puoi anche utilizzare l'aggregazione per ottenere un conteggio degli oggetti dati
che corrispondono a un filtro.
Linguaggio dell'espressione di filtro
Oltre alla funzionalità di ricerca KNN/ANN, Vector Search 2.0 offre funzionalità di query versatili utilizzando un linguaggio di query personalizzato. Il linguaggio di query è spiegato nella tabella seguente.
| Filtro | Descrizione | Tipi supportati | Esempio |
|---|---|---|---|
| $eq | Trova gli oggetti dati con valori dei campi uguali a un valore specificato. | Numero, stringa, booleano | {"genre": {"$eq": "documentary"}} |
| $ne | Corrisponde agli oggetti dati con valori di campo non uguali a un valore specificato. | Numero, stringa, booleano | {"genre": {"$ne": "drama"}} |
| $gt | Trova gli oggetti dati con valori dei campi maggiori di un valore specificato. | Numero | {"year": {"$gt": 2019}} |
| $gte | Corrisponde agli oggetti dati con valori dei campi maggiori o uguali a un valore specificato. | Numero | {"year": {"$gte": 2020}} |
| $lt | Corrisponde agli oggetti dati con valori di campo inferiori a un valore specificato. | Numero | {"year": {"$lt": 2020}} |
| $lte | Corrisponde agli oggetti dati con valori di campo minori o uguali a un valore specificato. | Numero | {"year": {"$lte": 2020}} |
| $in | Corrisponde agli oggetti dati con valori di campo in una matrice specificata. | Stringa | {"genre": {"$in": ["comedy", "documentary"]}} |
| $nin | Corrisponde agli oggetti dati con valori dei campi non presenti in un array specificato. | Stringa | {"genre": {"$nin": ["comedy", "documentary"]}} |
| $and | Combina le clausole della query con un operatore logico AND. | - | {"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} |
| $or | Combina le clausole della query con un operatore logico OR. | - | {"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} |
| $all | Seleziona i documenti in cui il valore dell'array di un campo contiene tutti i valori specificati. | - | {"colors": {"$all": ["red", "blue"]}} |
Esecuzione di query sulle raccolte
Il seguente esempio mostra come utilizzare un filtro per eseguire query sugli oggetti dati
in una raccolta con l'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)
Per eseguire un'aggregazione, utilizza l'endpoint aggregate e specifica il tipo di aggregazione nel corpo della richiesta.
L'esempio seguente mostra come conteggiare tutti gli oggetti dati in una raccolta con l'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)
Passaggi successivi
- Scopri come cercare gli oggetti dati.