L'API Query permet de récupérer des objets de données à partir d'une collection à l'aide d'un filtre. Cela revient à interroger une table de base de données et à utiliser une clause SQL WHERE. Vous pouvez également utiliser l'agrégation pour obtenir le nombre d'objets de données correspondant à un filtre.
Langage d'expression des filtres
En plus de la fonctionnalité de recherche KNN/ANN, Vector Search 2.0 offre des capacités de requête polyvalentes à l'aide d'un langage de requête personnalisé. Le langage de requête est expliqué dans le tableau suivant.
| Filtre | Description | Types compatibles | Exemple |
|---|---|---|---|
| $eq | Fait correspondre les objets de données dont les valeurs de champ sont égales à une valeur spécifiée. | Nombre, chaîne, booléen | {"genre": {"$eq": "documentary"}} |
| $ne | Fait correspondre les objets de données dont les valeurs de champ sont différentes d'une valeur spécifiée. | Nombre, chaîne, booléen | {"genre": {"$ne": "drama"}} |
| $gt | Fait correspondre les objets de données dont les valeurs de champ sont supérieures à une valeur spécifiée. | Nombre | {"year": {"$gt": 2019}} |
| $gte | Correspond aux objets de données dont les valeurs de champ sont supérieures ou égales à une valeur spécifiée. | Nombre | {"year": {"$gte": 2020}} |
| $lt | Fait correspondre les objets de données dont les valeurs de champ sont inférieures à une valeur spécifiée. | Nombre | {"year": {"$lt": 2020}} |
| $lte | Correspond aux objets de données dont les valeurs de champ sont inférieures ou égales à une valeur spécifiée. | Nombre | {"year": {"$lte": 2020}} |
| $in | Fait correspondre les objets de données dont les valeurs de champ figurent dans un tableau spécifié. | Chaîne | {"genre": {"$in": ["comedy", "documentary"]}} |
| $nin | Fait correspondre les objets de données dont les valeurs de champ ne figurent pas dans un tableau spécifié. | Chaîne | {"genre": {"$nin": ["comedy", "documentary"]}} |
| $et | Joint les clauses de requête avec un ET logique. | - | {"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} |
| $ou | Joint les clauses de requête avec un OR logique. | - | {"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} |
| $all | Sélectionne les documents dont la valeur de tableau d'un champ contient toutes les valeurs spécifiées. | - | {"colors": {"$all": ["red", "blue"]}} |
Interroger les collections
L'exemple suivant montre comment utiliser un filtre pour interroger des objets de données dans une collection dont l'ID est 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)
Pour effectuer une agrégation, vous devez utiliser le point de terminaison aggregate et spécifier le type d'agrégation dans le corps de la requête.
L'exemple suivant montre comment compter tous les objets de données d'une collection avec 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)
Étape suivante
- Découvrez comment rechercher des objets de données.