Operadores StructArrayCompatible with Milvus 3.0.x
La Matriz de Struct, o StructArray, en una entidad almacena un conjunto ordenado de elementos Struct. Cada Struct de la Matriz comparte el mismo esquema predefinido, que comprende múltiples vectores y campos escalares. Cuando un subcampo escalar de una Struct está indexado, puede utilizar filtros de elementos y operadores de la familia match para realizar un filtrado escalar sobre él.
Un filtro de elementos selecciona entidades que contengan al menos un valor en un campo StructArray que coincida con el predicado especificado. En cambio, los operadores de la familia match se utilizan para buscar entidades que contengan números o proporciones específicos de valores en un campo StructArray que coincida con el predicado especificado.
Al crear predicados a partir de $[subField], asegúrese de que el subcampo está indexado si trabaja con conjuntos de datos a gran escala, ya que estos operadores requieren iterar por los elementos de la matriz para cada entidad candidata.
Filtro de elementos
Utilice los filtros de elementos cuando necesite comprobar si una entidad contiene los valores que coinciden con un predicado específico en su campo StructArray.
element_filter(chunks, $[text] LIKE "Red%")
Como se muestra en la expresión de filtro de elementos anterior, el filtro de elementos devuelve entidades que contienen al menos un fragmento que empieza por "Red" en el subcampo text. El primer parámetro es el nombre del campo StructArray, mientras que el segundo es el predicado que se aplica al subcampo Struct.
Puede utilizar operadores de comparación, rango y aritméticos para construir la condición, y operadores lógicos para concatenar varias condiciones, como se muestra en Operadores básicos.
Sin embargo, cuando se construye una expresión de filtro que combina un predicado a nivel de entidad y un filtro de elemento, siempre se debe colocar el filtro de elemento al final, como se muestra en el siguiente ejemplo.
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
Operadores de familia de coincidencias
Los operadores de familia de coincidencias también funcionan sobre un campo StructArray. En lugar de comprobar simplemente si existe un elemento, puede determinar cuántos elementos (o qué proporción) deben satisfacer un predicado de elemento.
MATCH_ANY(identifier, predicate): devuelve entidades que contengan al menos un trozo que empiece por "Rojo" en el subcampotext; semánticamente, esto equivale aelement_filter.MATCH_ALL(identifier, predicate): devuelve entidades cuyos subcampos de texto en todos los trozos empiecen por "Rojo".MATCH_LEAST(identifier, predicate, k)text: devuelve entidades que contengan al menosktrozos que empiecen por "Rojo" en el subcampo .MATCH_MOST(identifier, predicate, k)devuelve entidades que contengan como máximoktrozos que empiecen por "Rojo" en el subcampotext.MATCH_EXACT(identifier, predicate, k)devuelve entidades que contienen exactamentektrozos que empiezan por "Rojo" en el subcampotext.
MATCH_ANY
Este operador se evalúa como verdadero si al menos un elemento de la matriz satisface el predicado, lo que indica que el equivalente estructural de un OR lógico a través de todos los elementos de la matriz.
Los operadores MATCH_ANY y los filtros de elementos son semánticamente iguales y pueden utilizarse indistintamente. Cuando necesite expresar la lógica count(matches) >= 1, deberá utilizarlos.
EJEMPLO:
El siguiente ejemplo devuelve entidades en las que cualquier parte del documento empieza por "Rojo".
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
Este operador sólo es verdadero si todos los elementos de la matriz cumplen el predicado.
Cuando necesite expresar la lógica count(matches) == total elements, utilice este operador.
EJEMPLO:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
Este operador es un filtro cuantitativo que devuelve verdadero si el número de elementos que satisfacen el predicado es mayor o igual que una constante especificada k.
Cuando necesite expresar la lógica count(matches) >= k, utilice este operador.
EJEMPLO:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
Este operador es un filtro cuantitativo que devuelve verdadero si el número de elementos que satisfacen el predicado es menor o igual que una constante especificada k.
Resulta especialmente útil para filtrar las entidades que apuntan demasiado a una palabra clave específica (reducción del ruido).
EJEMPLO:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
Este operador es el operador cuantitativo más restrictivo de la familia. Devuelve verdadero si y sólo si el número de elementos que satisfacen el predicado es exactamente k.
EJEMPLO:
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)