Realización de consultas condicionales
Este tema presenta cómo realizar consultas condicionales, similares a las condiciones WHERE en SQL.
A diferencia de la búsqueda de similitud de vectores, las consultas recuperan vectores basados en filtrado escalar utilizando expresiones booleanas. Milvus admite varios tipos de datos en campos escalares y una variedad de expresiones booleanas. Las expresiones booleanas pueden filtrar campos escalares o campos de clave primaria y recuperar todos los resultados que coincidan con las condiciones de filtro.
El siguiente ejemplo demuestra cómo ejecutar una consulta en un conjunto de datos que contiene 2000 filas, incluyendo el ID del libro (clave primaria), cantidad de palabras (campo escalar) e introducción del libro (campo vectorial). Simula la consulta de libros específicos basados en sus IDs.
Carga de la colección
En Milvus, todas las operaciones de búsqueda y consulta se realizan en memoria. Antes de realizar una consulta, la colección debe cargarse en memoria.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"book", // NombreColección
false // asíncrono
)
if err != nil {
log.Fatal("Error al cargar la colección:", err.Error())
}
Ejecución de la consulta
El siguiente ejemplo filtra vectores basados en valores específicos de book_id
y devuelve los campos book_id
y book_intro
de los resultados.
Milvus admite configurar niveles de consistencia para consultas. En este ejemplo, se establece el nivel de consistencia en Fuerte
. También puedes establecer el nivel de consistencia en Limitado
, Sesión
o Eventualmente
. Para obtener más información sobre los cuatro niveles de consistencia en Milvus, consulta Consistencia.
También puedes usar campos dinámicos en las expresiones de filtro y campos de salida en la solicitud de consulta. Por ejemplo, consulta el patrón dinámico.
opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
option.Limit = 3
option.Offset = 0
option.ConsistencyLevel = entity.ClStrong
option.IgnoreGrowing = false
})
queryResult, err := milvusClient.Query(
context.Background(), // ctx
"book", // NombreColección
"", // NombrePartición
entity.NewColumnInt64("book_id", []int64{2,4,6,8}), // expr
[]string{"book_id", "book_intro"}, // CamposSalida
opt, // opcionesConsulta
)
if err != nil {
log.Fatal("Error al consultar la colección:", err.Error())
}
Parámetro | Descripción | Opciones |
---|---|---|
ctx |
Contexto utilizado para controlar el proceso de llamada a la API. | N/A |
NombreColección |
Nombre de la colección a consultar. | N/A |
NombrePartición |
Nombres de las particiones a cargar. Si está vacío, consulta todas las particiones. | N/A |
expr |
Expresión booleana utilizada para filtrar atributos. | Para más información, consulta Reglas de Expresiones Booleanas. |
CamposSalida |
Nombres de los campos a devolver. | Los campos vectoriales no son compatibles en la versión actual. |
opts |
Opciones de consulta representadas en forma de entity.SearchQueryOptionFunc . |
- Limit indica el número de entidades a devolver. - Offset indica el número de entidades a omitir durante el proceso de búsqueda. La suma de este parámetro y Limit debe ser inferior a 16384 . - ConsistencyLevel indica el nivel de consistencia que se aplicará durante el proceso de búsqueda. - Ignore Growing indica si se debe ignorar el segmento en crecimiento durante el proceso de búsqueda de similitud. El valor predeterminado es False , lo que indica que la búsqueda involucra el segmento en crecimiento. |
Verifica el resultado devuelto.
fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
fmt.Println(qr.IDs)
}
Cálculo de la cantidad de entidades
Al ejecutar una consulta, puedes añadir count(*)
a output_fields
, para que Milvus pueda devolver la cantidad de entidades en la colección. Si deseas contar la cantidad de entidades que cumplen condiciones específicas, utiliza expr
para definir una expresión booleana.
Restricciones
Cuando se utiliza count(*)
en output_fields
, no se permite el uso del parámetro limit
.