Modelos de expressões de filtro
No Milvus, expressões de filtro complexas com numerosos elementos, especialmente aquelas que envolvem caracteres não ASCII, como os caracteres CJK, podem afetar significativamente o desempenho das consultas. Para resolver esta questão, o Milvus introduz um mecanismo de modelos de expressões de filtro concebido para melhorar a eficiência, reduzindo o tempo gasto na análise de expressões complexas. Esta página explica como utilizar os modelos de expressões de filtro nas operações de pesquisa, consulta e eliminação.
Visão geral
Os modelos de expressões de filtro permitem-lhe criar expressões de filtro com espaços reservados, que podem ser substituídos dinamicamente por valores durante a execução da consulta. Ao utilizar modelos, evita incorporar matrizes de grandes dimensões ou expressões complexas diretamente no filtro, reduzindo o tempo de análise e melhorando o desempenho das consultas.
Suponhamos que tem uma expressão de filtro que envolve dois campos, age e city, e que pretende encontrar todas as pessoas com idade superior a 25 anos e que vivam em «北京» (Pequim) ou em «上海» (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 espaços reservados que serão substituídos pelos valores reais em filter_params quando a consulta for executada.
A utilização de modelos de expressões de filtro no Milvus apresenta várias vantagens fundamentais:
Tempo de análise reduzido: ao substituir expressões de filtro grandes ou complexas por marcadores de posição, o sistema gasta menos tempo a analisar e a processar o filtro.
Melhor desempenho das consultas: Com a redução da sobrecarga de análise, o desempenho das consultas melhora, levando a um maior QPS e a tempos de resposta mais rápidos.
Escalabilidade: À medida que os seus conjuntos de dados crescem e as expressões de filtro se tornam mais complexas, a utilização de modelos garante que o desempenho se mantém eficiente e escalável.
Operações de pesquisa
Para 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 marcadores de posição. O dicionário filter_params contém os valores dinâmicos que o Milvus utilizará para substituir na expressão de filtro.
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 modelos pode ser aplicado às operações de consulta no Milvus. Na função query, define-se a expressão de filtro e utiliza-se o 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 de forma eficiente com a inserção dinâmica de valores, melhorando a velocidade de execução da consulta.
Operações de eliminação
Também é possível utilizar modelos de expressões de filtro em operações de eliminação. À semelhança da pesquisa e da consulta, a expressão filter define as condições, e o filter_params fornece os valores dinâmicos para os marcadores de posição.
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
Os modelos de expressões de filtro são uma ferramenta essencial para otimizar o desempenho das consultas no Milvus. Ao utilizar marcadores de posição e o dicionário filter_params, é possível reduzir significativamente o tempo gasto na análise de expressões de filtro complexas. Isto resulta numa execução mais rápida das consultas e num melhor desempenho geral.