O método Collection.query() pesquisa documentos semelhantes a um vetor fornecido ou ao vetor de um documento armazenado em uma coleção do DashVector. Também é possível recuperar documentos usando apenas um filtro de metadados.
Modos de consulta
O método Collection.query() oferece suporte a cinco modos de consulta, conforme os parâmetros fornecidos:
|
Modo |
Parâmetros obrigatórios |
Descrição |
|
Busca vetorial |
|
Localiza os documentos mais próximos de um vetor denso especificado |
|
Busca por chave primária |
|
Encontra os documentos mais próximos do vetor de um documento existente |
|
Busca vetorial filtrada |
|
Combina a busca por similaridade com filtragem de metadados |
|
Busca híbrida |
|
Une vetores densos e esparsos para busca semântica com reconhecimento de palavras-chave |
|
Consulta por correspondência |
Apenas |
Recupera documentos mediante filtro de metadados, sem classificação por similaridade |
Se você não especificar nemvectornemid, o métodoquery()executa uma consulta por correspondência usando exclusivamente o filtro condicional.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster do DashVector. Consulte Crie um cluster
Uma chave de API. Consulte Gerencie chaves de API
DashVector SDK (versão mais recente). Consulte Instale o DashVector SDK
Uma coleção com documentos já inseridos. Consulte Crie uma coleção e Inserir documentos
Assinatura da 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 da solicitação
|
Parâmetro |
Tipo |
Padrão |
Descrição |
|
|
|
|
Vetor denso para busca por similaridade. |
|
|
|
|
Chave primária de um documento existente. A busca usa o vetor desse documento. |
|
|
|
|
Número máximo de resultados a retornar, classificados por similaridade. |
|
|
|
|
Filtro condicional com sintaxe da cláusula WHERE do SQL. Consulte Filtragem condicional. |
|
|
|
|
Defina se os dados do vetor devem ser incluídos na resposta. |
|
|
|
|
Nome da partição. Restringe o escopo da busca a uma partição específica. |
|
|
|
|
Campos a retornar. Por padrão, todos os campos são retornados. |
|
|
|
|
Vetor esparso para busca semântica com reconhecimento de palavras-chave. Cada chave representa um índice de dimensão e cada valor corresponde ao peso. |
|
|
|
|
Indica se o modo assíncrono deve ser ativado. |
Resposta
O método query() retorna um objeto DashVectorResponse:
|
Campo |
Tipo |
Descrição |
Exemplo |
|
|
|
Código de status. O valor |
|
|
|
|
Mensagem de status. |
|
|
|
|
Identificador exclusivo da solicitação. |
|
|
|
|
Resultados da busca por similaridade. |
-- |
Exemplos
Todos os exemplos abaixo usam a seguinte configuração de cliente. Substitua os espaços reservados pelos valores reais:
|
Espaço reservado |
Descrição |
|
|
Sua chave de API obtida no console do DashVector |
|
|
URL do endpoint do seu cluster |
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')
Crie a coleção quickstart e insira documentos antes de executar estes exemplos. Consulte Crie uma coleção e Inserir documentos .
Busca por vetor
Forneça um vetor denso para localizar os documentos mais semelhantes.
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 o 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
)
Busca por chave primária
Use o parâmetro id para pesquisar com o vetor de um documento armazenado, sem fornecer os valores do vetor diretamente.
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 com topk e output_fields da mesma forma que na busca vetorial:
ret = collection.query(
id='1',
topk=100,
output_fields=['name', 'age'], # Only the name and age fields need to be returned.
include_vector=True
)
Busca com filtro condicional
Adicione o parâmetro filter para refinar os resultados por metadados. O filtro segue a sintaxe da cláusula WHERE do 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
)
Dica: Combinefiltercomidem vez devectorpara filtrar resultados de uma busca baseada em chave primária.
Busca híbrida com vetores densos e esparsos
Combine um vetor denso com um vetor esparso para executar uma busca semântica com reconhecimento de palavras-chave. O vetor esparso representa pesos de palavras-chave que complementam a incorporação densa.
# 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 Busca semântica com reconhecimento de palavras-chave para obter detalhes sobre a configuração.
Consulta por correspondência apenas com filtro
Omita vector e id para recuperar documentos baseando-se exclusivamente em condições de metadados, sem classificação por similaridade.
# 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
)
Próximos passos
Busca semântica com reconhecimento de palavras-chave -- Aumente a precisão da recuperação combinando vetores densos e esparsos.
Filtragem condicional -- Referência completa da sintaxe de expressões de filtro.