Consulta condicional
Este tema presenta cómo realizar consultas condicionales.
A diferencia de las búsquedas de similitud en vectores, las consultas condicionales recuperan vectores utilizando filtros escalares a través de expresiones booleanas. Milvus admite consultas en campos escalares y diversas expresiones booleanas. Las expresiones booleanas se pueden utilizar para filtrar campos escalares o campos de clave primaria para recuperar todos los resultados que coincidan con las condiciones de filtrado.
El siguiente ejemplo demuestra cómo hacer una consulta en un conjunto de datos de 2000 filas de libros, que incluye el ID del libro (clave primaria), el recuento de palabras (campo escalar) y la introducción del libro (campo vectorial), simulando el escenario de consultar un libro específico basado en su ID.
Cargar colección
Antes de realizar una consulta, la colección debe cargarse en la memoria.
from pymilvus import Collection
colección = Collection("libro") # Obtener una colección existente.
colección.load()
Realizar consulta
El siguiente ejemplo filtra vectores en base a valores específicos de book_id
y devuelve el campo book_id
y el campo book_intro
en los resultados.
Milvus admite establecer niveles de consistencia para las consultas. El ejemplo en este tema establece el nivel de consistencia en Strong
(fuerte). También puedes establecer el nivel de consistencia en Bounded
(limitado), Session
(sesión) o Eventually
(eventualmente). Para obtener más información sobre los cuatro niveles de consistencia en Milvus, consulta Consistencia.
También puedes utilizar campos dinámicos en la expresión de filtro y especificar campos de salida en la solicitud de consulta. Por ejemplo, consulta Esquema dinámico.
res = colección.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
Parámetro | Descripción |
---|---|
expr |
Expresión booleana utilizada para filtrar propiedades. Para más detalles sobre las reglas de expresiones booleanas, consulta Reglas de expresiones booleanas. |
limit |
Número de resultados más similares a devolver. La suma de este valor y offset debe ser menor que 16384. |
offset |
Número de resultados para omitir en la colección. Solo está disponible cuando se especifica limit , y la suma de este valor y limit debe ser menor que 16384. Por ejemplo, si deseas consultar los vecinos más cercanos del vector 9º y 10º, establece limit en 2 y offset en 8 . |
output_fields (opcional) |
Lista de nombres de campo a devolver. |
partition_names (opcional) |
Lista de nombres de partición a consultar. |
consistency_level (opcional) |
Nivel de consistencia para la consulta. |
Verifica los resultados devueltos.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
Contar entidades
Al realizar una consulta, puedes agregar count(*)
en output_fields
para que Milvus pueda devolver el número de entidades en la colección. Si deseas contar el número de entidades que cumplen condiciones específicas, utiliza expr
para definir una expresión booleana.
Contar todas las entidades en la colección:
res = colección.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Contar el número de entidades que cumplen condiciones de filtrado específicas:
res = colección.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Limitaciones
Cuando se utiliza count(*)
en output_fields
, el uso del parámetro limit
está prohibido.