Explicación del filtrado

Milvus proporciona potentes capacidades de filtrado que permiten una consulta precisa de sus datos. Las expresiones de filtrado le permiten dirigirse a campos escalares específicos y refinar los resultados de la búsqueda con diferentes condiciones. Esta guía explica cómo utilizar las expresiones de filtrado en Milvus, con ejemplos centrados en las operaciones de consulta. También puede aplicar estos filtros en solicitudes de búsqueda y eliminación.

Operadores básicos

Milvus admite varios operadores básicos para filtrar datos:

  • Operadores de comparación: ==, !=, >, <, >=, y <= permiten filtrar basándose en campos numéricos o de texto.

  • Filtros de rango: IN y LIKE ayudan a emparejar rangos o conjuntos de valores específicos.

  • Operadores aritméticos: +, -, *, /, %, y ** se utilizan para cálculos que implican campos numéricos.

  • Operadores lógicos: AND, OR, y NOT combinan múltiples condiciones en expresiones complejas.

  • Operadores IS NULL y IS NOT NULL: Los operadores IS NULL y IS NOT NULL se utilizan para filtrar campos en función de si contienen un valor nulo (ausencia de datos). Para más detalles, consulte Operadores básicos.

Ejemplo: Filtrar por color

Para buscar entidades con colores primarios (rojo, verde o azul) en un campo escalar color, utilice la siguiente expresión de filtrado:

filter='color in ["red", "green", "blue"]'

Ejemplo: Filtrado de campos JSON

Milvus permite referenciar claves en campos JSON. Por ejemplo, si tiene un campo JSON product con las claves price y model, y desea encontrar productos con un modelo específico y un precio inferior a 1.850, utilice esta expresión de filtro:

filter='product["model"] == "JSN-087" AND product["price"] < 1850'

Ejemplo: Filtrado de campos de matriz

Si tiene un campo array history_temperatures que contiene los registros de las temperaturas medias notificadas por los observatorios desde el año 2000, y desea encontrar observatorios en los que la temperatura en 2009 (la décima registrada ) supere los 23°C, utilice esta expresión:

filter='history_temperatures[10] > 23'

Para obtener más información sobre estos operadores básicos, consulte Operadores básicos.

Plantillas de expresiones de filtrado

Al filtrar utilizando caracteres CJK, el procesamiento puede ser más complejo debido a sus mayores conjuntos de caracteres y diferencias de codificación. Esto puede dar lugar a un rendimiento más lento, especialmente con el operador IN.

Milvus introduce plantillas de expresiones de filtrado para optimizar el rendimiento cuando se trabaja con caracteres CJK. Al separar los valores dinámicos de la expresión de filtro, el motor de consulta gestiona la inserción de parámetros de forma más eficiente.

Ejemplo

Para buscar personas mayores de 25 años que vivan en "北京" (Pekín) o "上海" (Shanghai), utilice la siguiente expresión de plantilla:

filter = "age > 25 AND city IN ['北京', '上海']"

Para mejorar el rendimiento, utilice esta variación con parámetros:

filter = "age > {age} AND city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}

Este enfoque reduce la sobrecarga de análisis sintáctico y mejora la velocidad de consulta. Para obtener más información, consulte Plantillas de filtros.

Operadores específicos de tipos de datos

Milvus proporciona operadores de filtrado avanzados para tipos de datos específicos, como los campos JSON, ARRAY y VARCHAR.

Operadores específicos de campo JSON

Milvus ofrece operadores avanzados para consultar campos JSON, permitiendo un filtrado preciso dentro de estructuras JSON complejas:

JSON_CONTAINS(identifier, jsonExpr): Comprueba si existe una expresión JSON en el campo.

# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'

JSON_CONTAINS_ALL(identifier, jsonExpr): Comprueba que todos los elementos de la expresión JSON están presentes.

# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'

JSON_CONTAINS_ANY(identifier, jsonExpr): Filtra las entidades en las que existe al menos un elemento en la expresión JSON.

# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'

Para obtener más información sobre los operadores JSON, consulte Operadores JSON.

Operadores específicos de campo ARRAY

Milvus proporciona operadores de filtrado avanzados para campos de array, como ARRAY_CONTAINS, ARRAY_CONTAINS_ALL, ARRAY_CONTAINS_ANY, y ARRAY_LENGTH, que permiten un control detallado de los datos de array:

ARRAY_CONTAINS: Filtra entidades que contienen un elemento específico.

filter="ARRAY_CONTAINS(history_temperatures, 23)"

ARRAY_CONTAINS_ALL: Filtra entidades en las que están presentes todos los elementos de una lista.

filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"

ARRAY_CONTAINS_ANY: Filtra entidades que contienen cualquier elemento de la lista.

filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"

ARRAY_LENGTH: Filtra en función de la longitud de la matriz.

filter="ARRAY_LENGTH(history_temperatures) < 10"

Para obtener más información sobre los operadores de matrices, consulte Operadores ARRAY.

Operadores específicos de campo VARCHAR

Milvus proporciona operadores especializados para búsquedas precisas basadas en texto en campos VARCHAR:

TEXT_MATCH operador

El operador TEXT_MATCH permite una recuperación precisa de documentos basada en términos de consulta específicos. Es especialmente útil para búsquedas filtradas que combinan filtros escalares con búsquedas de similitud vectorial. A diferencia de las búsquedas semánticas, Text Match se centra en las ocurrencias exactas de los términos.

Milvus utiliza Tantivy para soportar la indexación invertida y la búsqueda de texto basada en términos. El proceso implica:

  1. Analizador: Tokeniza y procesa el texto de entrada.

  2. Indexación: Crea un índice invertido que asigna tokens únicos a documentos.

Para más información, consulte Coincidencia de textos.

PHRASE_MATCH operadorCompatible with Milvus 2.6.x

El operador PHRASE_MATCH permite la recuperación precisa de documentos basados en coincidencias exactas de frases, teniendo en cuenta tanto el orden como la adyacencia de los términos de la consulta.

Para más información, consulte Concordancia de frases.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?