El propósito de la API de Query es recuperar objetos de datos de una colección con un filtro. Esto es similar a consultar una tabla de base de datos y usar una cláusula WHERE de SQL. También puedes usar la agregación para obtener un recuento de los objetos de datos que coinciden con un filtro.
Lenguaje de expresiones de filtro
Además de la funcionalidad de búsqueda de KNN/ANN, la versión 2.0 de Vector Search proporciona capacidades de consulta versátiles con un lenguaje de consulta personalizado. El lenguaje de búsqueda se explica en la siguiente tabla.
| Filtro | Descripción | Tipos compatibles | Ejemplo |
|---|---|---|---|
| $eq | Coincide con los objetos de datos que tienen valores de campo iguales a un valor especificado. | Número, cadena, booleano | {"genre": {"$eq": "documentary"}} |
| $ne | Coincide con los objetos de datos con valores de campo que no son iguales a un valor especificado. | Número, cadena, booleano | {"genre": {"$ne": "drama"}} |
| $gt | Coincide con los objetos de datos con valores de campo que son mayores que un valor especificado. | Número | {"year": {"$gt": 2019}} |
| $gte | Coincide con los objetos de datos que tienen valores de campo mayores o iguales que un valor especificado. | Número | {"year": {"$gte": 2020}} |
| $lt | Coincide con los objetos de datos que tienen valores de campo inferiores a un valor especificado. | Número | {"year": {"$lt": 2020}} |
| $lte | Coincide con los objetos de datos que tienen valores de campo menores o iguales a un valor especificado. | Número | {"year": {"$lte": 2020}} |
| $in | Coincide con los objetos de datos que tienen valores de campo en un array especificado. | String | {"genre": {"$in": ["comedy", "documentary"]}} |
| $nin | Coincide con los objetos de datos con valores de campo que no están en un array especificado. | String | {"genre": {"$nin": ["comedy", "documentary"]}} |
| $and | Une las cláusulas de la consulta con un AND lógico. | - | {"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} |
| $or | Une cláusulas de consulta con un OR lógico. | - | {"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} |
| $all | Selecciona los documentos en los que el valor del array de un campo contiene todos los valores especificados. | - | {"colors": {"$all": ["red", "blue"]}} |
Cómo consultar colecciones
En el siguiente ejemplo, se muestra cómo usar un filtro para consultar objetos de datos en una colección con el 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)
Para realizar una agregación, usa el extremo aggregate y especifica el tipo de agregación en el cuerpo de la solicitud.
En el siguiente ejemplo, se muestra cómo contar todos los objetos de datos en una colección con el 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)
Próximos pasos
- Obtén más información para buscar objetos de datos.