A busca por similaridade de vetores, isoladamente, raramente atende aos requisitos reais. As aplicações geralmente precisam restringir resultados com base em metadados — por exemplo, retornar apenas produtos dentro de uma faixa de preço ou documentos de uma categoria específica. A filtragem condicional do DashVector permite associar campos de metadados a vetores e passar uma expressão filter durante a consulta. Assim, os resultados de similaridade incluem apenas os vetores correspondentes às condições definidas.
Início rápido
Este exemplo consulta uma coleção para encontrar homens com mais de 18 anos e peso superior a 65 kg:
docs = collection.query(
[0.1, 0.1, 0.1, 0.1],
topk=10,
filter='age > 18 and weight > 65.0 and male = true'
)
O parâmetro filter aceita uma expressão booleana construída com operadores de comparação, string e lógicos. Para a sintaxe completa, consulte Sintaxe de expressão de filtro.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma chave de API e um endpoint de cluster do DashVector
Uma coleção chamada
quickstart. Para instruções de configuração, consulte a seção "Exemplo" em Crie uma coleção
Inserir documentos com campos de metadados
Insira documentos na coleção quickstart. Cada documento inclui um ID, um vetor de 4 dimensões e um conjunto de campos de metadados:
import dashvector
import numpy as np
client = dashvector.Client(
api_key='<your-api-key>',
endpoint='<your-cluster-endpoint>'
)
collection = client.get(name='quickstart')
ret = collection.insert([
('1', np.random.rand(4), {'name': 'alice', 'age': 10, 'male': True, 'weight': 35.0}),
('2', np.random.rand(4), {'name': 'bob', 'age': 20, 'male': False, 'weight': 45.0}),
('3', np.random.rand(4), {'name': 'carol', 'age': 30, 'male': True, 'weight': 75.0}),
('4', np.random.rand(4), {'name': 'dave', 'age': 5, 'male': False, 'weight': 18.0}),
('5', np.random.rand(4), {'name': 'eve', 'age': 40, 'male': True, 'weight': 70.0})
])
assert ret
Substitua os seguintes espaços reservados pelos valores reais:
|
Espaço reservado |
Descrição |
|
|
Sua chave de API do DashVector |
|
|
URL do endpoint do seu cluster |
A coleção quickstart é criada com três campos predefinidos: name (str), weight (float) e age (int). Como o DashVector é livre de esquema, você pode adicionar campos não definidos na criação da coleção — como o campo male acima — ao inserir documentos.
Consultar com uma expressão de filtro
Passe uma string filter para collection.query() e restrinja os resultados. Este exemplo busca homens com mais de 18 anos e peso superior a 65 kg:
import dashvector
client = dashvector.Client(
api_key='<your-api-key>',
endpoint='<your-cluster-endpoint>'
)
collection = client.get(name='quickstart')
# Filter: males over 18 weighing more than 65 kg
docs = collection.query(
[0.1, 0.1, 0.1, 0.1],
topk=10,
filter='age > 18 and weight > 65.0 and male = true'
)
print(docs)
Sintaxe de expressão de filtro
Uma expressão de filtro consiste em uma ou mais condições unidas por operadores lógicos. Cada condição segue o padrão:
<field> <operator> <value>
Operadores de comparação
|
Operador |
Descrição |
Tipos suportados |
Exemplo |
Corresponde quando |
|
|
Menor que |
|
|
|
|
|
Menor ou igual a |
|
|
|
|
|
Igual a |
|
|
|
|
|
Diferente de |
|
|
|
|
|
Maior ou igual a |
|
|
|
|
|
Maior que |
|
|
|
Operador de string
Use o operador like para correspondência de prefixo em campos str.
|
Operador |
Descrição |
Exemplo |
Corresponde quando |
|
|
Correspondência de prefixo |
|
|
Operadores lógicos
Combine várias condições com and ou or.
|
Operador |
Descrição |
Exemplo |
Corresponde quando |
|
|
Ambas as condições devem ser verdadeiras |
|
|
|
|
Pelo menos uma condição deve ser verdadeira |
|
|
Use parênteses () para controlar a ordem de avaliação. Exemplo:
age > 18 and (weight > 65.0 or male = true)
Essa expressão avalia primeiro (weight > 65.0 or male = true) e depois combina o resultado com age > 18.
Tipos de campo suportados
Os campos do DashVector suportam os seguintes tipos de dados Python:
|
Tipo |
Descrição |
Intervalo |
|
|
String |
-- |
|
|
Inteiro |
32 bits com sinal: -2.147.483.648 a 2.147.483.647 |
|
|
Número de ponto flutuante |
-- |
|
|
Booleano |
|
Inteiros em Python têm tamanho ilimitado, mas o DashVector suporta apenas inteiros com sinal de 32 bits. Mantenha os valores inteiros dentro do intervalo de -2.147.483.648 a 2.147.483.647 para evitar estouro.