Consulta Condicional
Este tópico apresenta como realizar consultas condicionais.
Ao contrário das pesquisas de similaridade em vetores, as consultas condicionais recuperam vetores usando filtros escalares por meio de expressões booleanas. O Milvus suporta consultas em campos escalares e várias expressões booleanas. As expressões booleanas podem ser usadas para filtrar campos escalares ou campos de chave primária para recuperar todos os resultados que correspondem às condições de filtragem.
O exemplo a seguir demonstra como consultar um conjunto de dados de 2000 registros de livros, incluindo o ID do livro (chave primária), contagem de palavras (campo escalar) e introdução do livro (campo de vetor), simulando o cenário de consulta de um livro específico com base em seu ID.
Carregar Coleção
Antes de realizar uma consulta, a coleção precisa ser carregada na memória.
from pymilvus import Collection
colecao = Collection("livro") # Obter uma coleção existente.
colecao.load()
Realizar Consulta
O exemplo a seguir filtra vetores com base em valores específicos de book_id
e retorna os campos book_id
e book_intro
nos resultados.
O Milvus suporta definir níveis de consistência para consultas. O exemplo neste tópico define o nível de consistência como Forte
. Você também pode definir o nível de consistência como Limitado
, Sessão
ou Eventualmente
. Para obter mais informações sobre os quatro níveis de consistência no Milvus, consulte Consistência.
Você também pode usar campos dinâmicos na expressão de filtro e especificar campos de saída na solicitação de consulta. Por exemplo, consulte Esquema Dinâmico.
res = colecao.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
Parâmetro | Descrição |
---|---|
expr |
Expressão booleana usada para filtrar propriedades. Para mais detalhes sobre as regras de expressão booleana, consulte Regras de Expressão Booleana. |
limit |
Número de resultados mais semelhantes a serem retornados. A soma desse valor e offset deve ser menor que 16384. |
offset |
Número de resultados a serem ignorados na coleção. Somente disponível quando limit é especificado, e a soma desse valor e limit deve ser menor que 16384. Por exemplo, se você deseja consultar os 9º e 10º vizinhos mais próximos de um vetor, defina limit como 2 e offset como 8 . |
output_fields (opcional) |
Lista de nomes de campo a serem retornados. |
partition_names (opcional) |
Lista de nomes de partição a serem consultados. |
consistency_level (opcional) |
Nível de consistência para a consulta. |
Verifique os resultados retornados.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
Contar Entidades
Ao realizar uma consulta, você pode adicionar count(*)
em output_fields
para que o Milvus possa retornar o número de entidades na coleção. Se desejar contar o número de entidades que atendem a condições específicas, use expr
para definir uma expressão booleana.
Contar todas as entidades na coleção:
res = colecao.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Contar o número de entidades que atendem a condições de filtragem específicas:
res = colecao.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Limitações
Ao usar count(*)
em output_fields
, o uso do parâmetro limit
é proibido.