Modelo de filtro
No Milvus, as expressões de filtro complexas com numerosos elementos, especialmente as que envolvem caracteres não ASCII como os caracteres CJK, podem afetar significativamente o desempenho da consulta. Para resolver este problema, o Milvus introduz um mecanismo de modelo de expressão de filtro concebido para melhorar a eficiência, reduzindo o tempo gasto a analisar expressões complexas. Esta página explica a utilização do modelo de expressão de filtro nas operações de pesquisa, consulta e eliminação.
Visão geral
O modelo de expressão de filtro permite-lhe criar expressões de filtro com marcadores de posição, que podem ser substituídos dinamicamente por valores durante a execução da consulta. Com a utilização de modelos, evita-se a incorporação de grandes matrizes ou expressões complexas diretamente no filtro, reduzindo o tempo de análise e melhorando o desempenho da consulta.
Digamos que você tenha uma expressão de filtro envolvendo dois campos, age
e city
, e queira encontrar todas as pessoas cuja idade seja maior que 25 anos e que morem em "北京" (Pequim) ou "上海" (Xangai). Em vez de incorporar diretamente os valores na expressão de filtro, pode utilizar um modelo.
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
Aqui, {age}
e {city}
são marcadores de posição que serão substituídos pelos valores reais em filter_params
quando a consulta for executada.
O uso de modelos de expressão de filtro no Milvus tem várias vantagens importantes.
Redução do tempo de análise: Ao substituir expressões de filtro grandes ou complexas por placeholders, o sistema gasta menos tempo analisando e processando o filtro.
Melhoria do desempenho da consulta: Com a redução da sobrecarga de análise, o desempenho da consulta melhora, levando a QPS mais altos e tempos de resposta mais rápidos.
Escalabilidade: À medida que os conjuntos de dados crescem e as expressões de filtro se tornam mais complexas, a criação de modelos garante que o desempenho permaneça eficiente e escalável.
Operações de pesquisa
Para as operações de pesquisa no Milvus, a expressão filter
é utilizada para definir a condição de filtragem e o parâmetro filter_params
é utilizado para especificar os valores dos placeholders. O dicionário filter_params
contém os valores dinâmicos que o Milvus utilizará para substituir a expressão de filtragem.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.search(
"hello_milvus",
vectors[:nq],
filter=expr,
limit=10,
output_fields=["age", "city"],
search_params={"metric_type": "COSINE", "params": {"search_list": 100}},
filter_params=filter_params,
)
Neste exemplo, o Milvus substituirá dinamicamente {age}
por 25
e {city}
por ["北京", "上海"]
ao executar a pesquisa.
Operações de consulta
O mesmo mecanismo de criação de modelos pode ser aplicado às operações de consulta no Milvus. Na função query
, define-se a expressão de filtragem e utiliza-se filter_params
para especificar os valores a substituir.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.query(
"hello_milvus",
filter=expr,
output_fields=["age", "city"],
filter_params=filter_params
)
Ao utilizar filter_params
, o Milvus lida eficazmente com a inserção dinâmica de valores, melhorando a velocidade de execução da consulta.
Operações de exclusão
Também é possível utilizar modelos de expressão de filtro em operações de eliminação. De forma semelhante à pesquisa e consulta, a expressão filter
define as condições e a expressão filter_params
fornece os valores dinâmicos para os espaços reservados.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
Esta abordagem melhora o desempenho das operações de eliminação, especialmente quando se lida com condições de filtragem complexas.
Conclusão
O modelo de expressão de filtro é uma ferramenta essencial para otimizar o desempenho das consultas no Milvus. Utilizando placeholders e o dicionário filter_params
, é possível reduzir significativamente o tempo gasto na análise de expressões de filtro complexas. Isso leva a uma execução mais rápida da consulta e a um melhor desempenho geral.