Plantillas de filtro
En Milvus, las expresiones de filtro complejas con numerosos elementos, especialmente las que implican caracteres no ASCII como los caracteres CJK, pueden afectar significativamente al rendimiento de la consulta. Para solucionar este problema, Milvus introduce un mecanismo de plantillas de expresiones de filtro diseñado para mejorar la eficacia reduciendo el tiempo empleado en analizar expresiones complejas. Esta página explica el uso de plantillas de expresiones de filtro en operaciones de búsqueda, consulta y eliminación.
Descripción general
Las plantillas de expresiones de filtrado permiten crear expresiones de filtrado con marcadores de posición que pueden sustituirse dinámicamente por valores durante la ejecución de la consulta. El uso de plantillas permite evitar la incrustación de matrices de gran tamaño o expresiones complejas directamente en el filtro, lo que reduce el tiempo de análisis y mejora el rendimiento de las consultas.
Supongamos que tiene una expresión de filtro que incluye dos campos, age
y city
, y desea encontrar a todas las personas cuya edad sea superior a 25 años y que vivan en "北京" (Pekín) o "上海" (Shanghái). En lugar de incrustar directamente los valores en la expresión del filtro, puede utilizar una plantilla.
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
Aquí, {age}
y {city}
son marcadores de posición que se sustituirán por los valores reales en filter_params
cuando se ejecute la consulta.
El uso de plantillas de expresión de filtro en Milvus tiene varias ventajas clave.
Reducción del tiempo de análisis: Al sustituir expresiones de filtro grandes o complejas por marcadores de posición, el sistema emplea menos tiempo en analizar y procesar el filtro.
Mejora del rendimiento de las consultas: Al reducirse la sobrecarga de análisis sintáctico, mejora el rendimiento de las consultas, lo que se traduce en mayores QPS y tiempos de respuesta más rápidos.
Escalabilidad: A medida que sus conjuntos de datos crecen y las expresiones de filtro se vuelven más complejas, la creación de plantillas garantiza que el rendimiento siga siendo eficiente y escalable.
Operaciones de búsqueda
Para las operaciones de búsqueda en Milvus, la expresión filter
se utiliza para definir la condición de filtrado, y el parámetro filter_params
se utiliza para especificar los valores de los marcadores de posición. El diccionario filter_params
contiene los valores dinámicos que Milvus utilizará para sustituir en la expresión de filtrado.
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,
)
En este ejemplo, Milvus sustituirá dinámicamente {age}
por 25
y {city}
por ["北京", "上海"]
al ejecutar la búsqueda.
Operaciones de consulta
El mismo mecanismo de plantillas puede aplicarse a las operaciones de consulta en Milvus. En la función query
, se define la expresión de filtro y se utiliza filter_params
para especificar los valores a sustituir.
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
)
Utilizando filter_params
, Milvus maneja eficientemente la inserción dinámica de valores, mejorando la velocidad de ejecución de la consulta.
Operaciones de eliminación
También puede utilizar plantillas de expresiones de filtrado en operaciones de eliminación. De forma similar a la búsqueda y la consulta, la expresión filter
define las condiciones y filter_params
proporciona los valores dinámicos para los marcadores de posición.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
Este enfoque mejora el rendimiento de las operaciones de eliminación, especialmente cuando se trata de condiciones de filtro complejas.
Conclusión
Las plantillas de expresiones de filtro son una herramienta esencial para optimizar el rendimiento de las consultas en Milvus. Utilizando marcadores de posición y el diccionario filter_params
, puede reducir significativamente el tiempo empleado en analizar expresiones de filtro complejas. Esto conduce a una ejecución más rápida de la consulta y a un mejor rendimiento general.