Collection.query() busca en una colección de DashVector los documentos similares a un vector dado o al vector de un documento almacenado. También puede recuperar documentos únicamente con un filtro de metadatos.
Modos de consulta
Collection.query() admite cinco modos de consulta según los parámetros que proporcione:
|
Modo |
Parámetros obligatorios |
Descripción |
|
Búsqueda por vector |
|
Encuentra los documentos más cercanos a un vector denso determinado. |
|
Búsqueda por clave primaria |
|
Encuentra los documentos más cercanos al vector de un documento existente. |
|
Búsqueda por vector filtrada |
|
Combina la búsqueda por similitud con el filtrado de metadatos. |
|
Búsqueda híbrida |
|
Combina vectores densos y dispersos para una búsqueda semántica que reconoce palabras clave. |
|
Consulta por coincidencia |
Solo |
Recupera documentos mediante un filtro de metadatos, sin ordenarlos por similitud. |
Si no se especifican nivectorniid,query()ejecuta una consulta por coincidencia que usa únicamente el filtro condicional.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster de DashVector. Consulte Create a cluster
Una clave de API. Consulte Manage API keys
El SDK de DashVector (versión más reciente). Consulte Install DashVector SDK
Una colección con documentos ya insertados. Consulte Create a collection y Insert documents
Firma de la API
Collection.query(
vector: Optional[Union[List[Union[int, float]], np.ndarray]] = None,
id: Optional[str] = None,
topk: int = 10,
filter: Optional[str] = None,
include_vector: bool = False,
partition: Optional[str] = None,
output_fields: Optional[List[str]] = None,
sparse_vector: Optional[Dict[int, float]] = None,
async_req: False
) -> DashVectorResponse
Parámetros de solicitud
|
Parámetro |
Tipo |
Valor predeterminado |
Descripción |
|
|
|
|
Vector denso para la búsqueda por similitud. |
|
|
|
|
Clave primaria de un documento existente. La búsqueda utiliza el vector de ese documento. |
|
|
|
|
Número máximo de resultados que se devuelven, ordenados por similitud. |
|
|
|
|
Filtro condicional con sintaxis de cláusula WHERE de SQL. Consulte Conditional filtering. |
|
|
|
|
Indica si se incluyen los datos del vector en la respuesta. |
|
|
|
|
Nombre de la partición. Limita el alcance de la búsqueda a una partición específica. |
|
|
|
|
Campos que se devuelven. De forma predeterminada, se devuelven todos los campos. |
|
|
|
|
Vector disperso para keyword-aware semantic search. Cada clave es un índice de dimensión y cada valor es el peso. |
|
|
|
|
Indica si se habilita el modo asíncrono. |
Respuesta
query() devuelve un objeto DashVectorResponse:
|
Campo |
Tipo |
Descripción |
Ejemplo |
|
|
|
Código de estado. El valor |
|
|
|
|
Mensaje de estado. |
|
|
|
|
Identificador único de la solicitud. |
|
|
|
|
Resultados de la búsqueda por similitud. |
-- |
Ejemplos
Todos los ejemplos siguientes usan la configuración de cliente que se muestra a continuación. Reemplace los marcadores de posición con sus valores reales:
|
Marcador de posición |
Descripción |
|
|
Su clave de API de la consola de DashVector |
|
|
La URL del endpoint de su clúster |
import dashvector
import numpy as np
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
# Get the target collection
collection = client.get(name='quickstart')
Cree la colección quickstart e inserte documentos antes de ejecutar estos ejemplos. Consulte Create a collection y Insert documents .
Búsqueda por vector
Pase un vector denso para encontrar los documentos más similares.
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4]
)
# Check whether the query method is successfully called.
if ret:
print('query success')
print(len(ret))
for doc in ret:
print(doc)
print(doc.id)
print(doc.vector)
print(doc.fields)
Para personalizar el conjunto de resultados, especifique topk, output_fields e include_vector:
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4],
topk=100,
output_fields=['name', 'age'], # Only the name and age fields need to be returned.
include_vector=True
)
Búsqueda por clave primaria
Use el parámetro id para buscar con el vector de un documento almacenado, sin proporcionar los valores del vector directamente.
ret = collection.query(
id='1'
)
# Check whether the query method is successfully called.
if ret:
print('query success')
print(len(ret))
for doc in ret:
print(doc)
print(doc.id)
print(doc.vector)
print(doc.fields)
Combine id con topk y output_fields de la misma manera que en la búsqueda por vector:
ret = collection.query(
id='1',
topk=100,
output_fields=['name', 'age'], # Only the name and age fields need to be returned.
include_vector=True
)
Búsqueda con filtro condicional
Agregue el parámetro filter para acotar los resultados por metadatos. Este filtro sigue la sintaxis de la cláusula WHERE de SQL.
# Perform a similarity search by using the vector or primary key and a conditional filter.
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4], # Specify a vector for search. Alternatively, you can specify a primary key for search.
topk=100,
filter='age > 18', # Specify a conditional filter to perform a match query on documents whose value of the age field is greater than 18.
output_fields=['name', 'age'], # Only the name and age fields need to be returned.
include_vector=True
)
Sugerencia: Combinefilterconiden lugar devectorpara filtrar los resultados de una búsqueda basada en la clave primaria.
Búsqueda híbrida con vectores densos y dispersos
Combine un vector denso con un vector disperso para ejecutar una búsqueda semántica que reconoce palabras clave. El vector disperso representa los pesos de las palabras clave que complementan el embedding denso.
# Perform a similarity search by using both dense and sparse vectors.
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4], # Specify a vector for search.
sparse_vector={1: 0.3, 20: 0.7}
)
Consulte Keyword-aware semantic search para conocer los detalles de configuración.
Consulta por coincidencia solo con filtro
Omita tanto vector como id para recuperar documentos basándose únicamente en condiciones de metadatos, sin ordenarlos por similitud.
# Perform a match query only by using a conditional filter without specifying a vector or primary key.
ret = collection.query(
topk=100,
filter='age > 18', # Specify a conditional filter to perform a match query on documents whose value of the age field is greater than 18.
output_fields=['name', 'age'], # Only the name and age fields need to be returned.
include_vector=True
)
Pasos siguientes
Keyword-aware semantic search: mejore la precisión de recuperación al combinar vectores densos y dispersos.
Conditional filtering: referencia completa de la sintaxis de expresiones de filtro.