Explicação da filtragem
Milvus fornece poderosas capacidades de filtragem que permitem uma consulta precisa dos seus dados. As expressões de filtragem permitem-lhe direcionar campos escalares específicos e refinar os resultados da pesquisa com diferentes condições. Este guia explica como utilizar expressões de filtragem no Milvus, com exemplos focados em operações de consulta. Também pode aplicar estes filtros em pedidos de pesquisa e eliminação.
Operadores básicos
O Milvus suporta vários operadores básicos para filtrar dados.
Operadores de comparação:
==
,!=
,>
,<
,>=
, e<=
permitem filtrar com base em campos numéricos, de texto ou de data.Filtros de intervalo:
IN
eLIKE
ajudam a corresponder a intervalos ou conjuntos de valores específicos.Operadores aritméticos:
+
,-
,*
,/
,%
, e `` são utilizados para cálculos que envolvem campos numéricos.Operadores lógicos:
AND
,OR
, eNOT
ou '&&', '||', '~', '!' combinam várias condições em expressões complexas.
Exemplo: Filtragem por cor
Para encontrar entidades com cores primárias (vermelho, verde ou azul) em um campo escalar color
, use a seguinte expressão de filtro.
filter='color in ["red", "green", "blue"]'
Exemplo: Filtragem de campos JSON
Milvus permite referenciar chaves em campos JSON. Por exemplo, se tiver um campo JSON product
com as chaves price
e model
, e quiser encontrar produtos com um modelo específico e um preço inferior a 1.850, utilize esta expressão de filtro.
filter='product["model"] == "JSN-087" and product["price"] < 1850'
Exemplo: Filtragem de campos de matriz
Se tiver um campo de matriz history_temperatures
que contenha registos de temperatura e pretender encontrar observatórios em que a 10ª temperatura registada seja superior a 23°C, utilize esta expressão.
filter='history_temperatures[10] > 23'
Para mais informações sobre estes operadores básicos, consulte Operadores básicos.
Modelos de expressão de filtro
Ao filtrar utilizando caracteres CJK, o processamento pode ser mais complexo devido aos seus conjuntos de caracteres maiores e às diferenças de codificação. Isto pode resultar num desempenho mais lento, especialmente com o operador IN
.
O Milvus introduz modelos de expressão de filtro para otimizar o desempenho quando se trabalha com caracteres CJK. Ao separar os valores dinâmicos da expressão de filtro, o motor de consulta lida com a inserção de parâmetros de forma mais eficiente.
Exemplo
Para encontrar indivíduos com mais de 25 anos que vivem em "北京" (Pequim) ou "上海" (Xangai), use a seguinte expressão de modelo.
filter = "age > 25 and city in ['北京', '上海']"
Para melhorar o desempenho, use esta variação com parâmetros.
filter = "age > {age} and city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}
Esta abordagem reduz a sobrecarga de análise e melhora a velocidade de consulta. Para obter mais informações, consulte Modelo de filtro.
Operadores específicos de tipo de dados
O Milvus fornece operadores de filtragem avançados para tipos de dados específicos, como campos JSON, ARRAY e VARCHAR.
Operadores específicos do campo JSON
O Milvus oferece operadores avançados para consulta de campos JSON, permitindo uma filtragem precisa dentro de estruturas JSON complexas.
JSON_CONTAINS(identifier, jsonExpr)
: Verifica se existe uma expressão JSON no campo.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'
JSON_CONTAINS_ALL(identifier, jsonExpr)
: Assegura que todos os elementos da expressão JSON estão presentes.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'
JSON_CONTAINS_ANY(identifier, jsonExpr)
: Filtra as entidades em que pelo menos um elemento existe na expressão JSON.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'
Para obter mais detalhes sobre os operadores JSON, consulte Operadores JSON.
Operadores específicos do campo ARRAY
O Milvus fornece operadores de filtragem avançados para campos de matriz, tais como ARRAY_CONTAINS
, ARRAY_CONTAINS_ALL
, ARRAY_CONTAINS_ANY
, e ARRAY_LENGTH
, que permitem um controlo fino sobre os dados da matriz.
ARRAY_CONTAINS
: Filtra entidades que contêm um elemento específico.
filter="ARRAY_CONTAINS(history_temperatures, 23)"
ARRAY_CONTAINS_ALL
: Filtra entidades onde todos os elementos de uma lista estão presentes.
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"
ARRAY_CONTAINS_ANY
: Filtra entidades contendo qualquer elemento da lista.
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"
ARRAY_LENGTH
: Filtra com base no comprimento da matriz.
filter="ARRAY_LENGTH(history_temperatures) < 10"
Para obter mais detalhes sobre os operadores de matriz, consulte Operadores de matriz.
Operadores específicos do campo VARCHAR
O operador Text_Match
permite a recuperação precisa de documentos com base em termos de consulta específicos. É particularmente útil para pesquisas filtradas que combinam filtros escalares com pesquisas de semelhança de vectores. Ao contrário das pesquisas semânticas, a correspondência de texto centra-se nas ocorrências exactas de termos.
O Milvus utiliza o Tantivy para suportar a indexação invertida e a pesquisa de texto baseada em termos. O processo envolve.
Analisador: Tokeniza e processa o texto de entrada.
Indexação: Cria um índice invertido mapeando tokens únicos para documentos.
Para obter mais detalhes, consulte Correspondência de texto.