Realização de Consultas Condicionais
Este tópico apresenta como realizar consultas condicionais, semelhantes às condições WHERE em SQL.
Ao contrário da pesquisa de similaridade de vetores, as consultas recuperam vetores com base na filtragem escalar usando expressões booleanas. O Milvus suporta vários tipos de dados em campos escalares e uma variedade de expressões booleanas. As expressões booleanas podem filtrar campos escalares ou campos de chave primária e recuperar todos os resultados que correspondam às condições de filtro.
O exemplo a seguir demonstra como executar uma consulta em um conjunto de dados contendo 2000 linhas, incluindo ID do livro (chave primária), contagem de palavras (campo escalar) e introdução do livro (campo de vetor). Ele simula a consulta de livros específicos com base em seus IDs.
Carregando a Coleção
No Milvus, todas as operações de pesquisa e consulta são realizadas na memória. Antes de realizar uma consulta, a coleção precisa ser carregada na memória.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"livro", // Nome daColecao
false // assíncrono
)
if err != nil {
log.Fatal("Falha ao carregar a coleção:", err.Error())
}
Executando a 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
dos resultados.
O Milvus suporta definição de níveis de consistência para consultas. Este exemplo 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 mais informações sobre os quatro níveis de consistência no Milvus, consulte Consistência.
Você também pode usar campos dinâmicos nas expressões de filtro e nos campos de saída na solicitação de consulta. Por exemplo, consulte o padrão dinâmico.
opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
option.Limit = 3
option.Offset = 0
option.ConsistencyLevel = entity.ClStrong
option.IgnoreGrowing = false
})
queryResult, err := milvusClient.Query(
context.Background(), // ctx
"livro", // Nome daColecao
"", // NomeParticao
entity.NewColumnInt64("book_id", []int64{2,4,6,8}), // expr
[]string{"book_id", "book_intro"}, // OutputFields
opt, // queryOptions
)
if err != nil {
log.Fatal("Falha ao consultar a coleção:", err.Error())
}
Parâmetro | Descrição | Opções |
---|---|---|
ctx |
Contexto usado para controlar o processo da chamada de API. | N/A |
Nome daColecao |
Nome da coleção a ser consultada. | N/A |
partitionName |
Nomes das partições a serem carregadas. Se vazio, consulta todas as partições. | N/A |
expr |
Expressão booleana usada para filtrar atributos. | Para mais informações, consulte as Regras de Expressão Booleana. |
OutputFields |
Nomes dos campos a serem devolvidos. | Os campos de vetor não são suportados na versão atual. |
opts |
Opções de consulta representadas na forma entity.SearchQueryOptionFunc . |
- Limit indica o número de entidades a serem retornadas. - Offset indica o número de entidades a ser ignorado durante o processo de pesquisa. A soma deste parâmetro e Limit deve ser inferior a 16384 . - ConsistencyLevel indica o nível de consistência a ser aplicado durante o processo de pesquisa. - Ignore Growing indica se deve ignorar o segmento em crescimento durante o processo de pesquisa de similaridade. O valor padrão é Falso , indicando que a pesquisa envolve o segmento em crescimento. |
Verifique o resultado retornado.
fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
fmt.Println(qr.IDs)
}
Cálculo da Quantidade de Entidades
Ao executar uma consulta, você pode acrescentar count(*)
aos output_fields
, para que o Milvus possa devolver a quantidade de entidades na coleção. Se desejar contar a quantidade de entidades que satisfaçam condições específicas, use expr
para definir uma expressão booleana.
Restrições
Ao usar count(*)
em output_fields
, o uso do parâmetro limit
não é permitido.