Operadores de StructArrayCompatible with Milvus 3.0.x
O Array de Structs, ou StructArray, em uma entidade armazena um conjunto ordenado de elementos Struct. Cada Struct no Array compartilha o mesmo esquema predefinido, que compreende vários vetores e campos escalares. Quando um subcampo escalar num Struct é indexado, pode utilizar filtros de elementos e operadores na família de correspondências para efetuar uma filtragem escalar no mesmo.
Um filtro de elementos seleciona entidades que contêm pelo menos um valor num campo StructArray que corresponde ao predicado especificado. Por outro lado, os operadores da família de correspondência são utilizados para encontrar entidades que contenham números específicos ou proporções de valores num campo StructArray que corresponda ao predicado especificado.
Ao criar predicados em $[subField], certifique-se de que o subcampo é indexado se estiver a trabalhar com conjuntos de dados de grande escala, uma vez que estes operadores requerem a iteração através dos elementos da matriz para cada entidade candidata.
Filtro de elementos
Utilize filtros de elementos quando precisar de verificar se uma entidade contém os valores que correspondem a um predicado específico no seu campo StructArray.
element_filter(chunks, $[text] LIKE "Red%")
Como mostrado na expressão de filtro de elemento acima, o filtro de elemento retorna entidades que contêm pelo menos um pedaço que começa com "Red" no subcampo text. O primeiro parâmetro é o nome do campo StructArray, enquanto o segundo parâmetro é o predicado que se aplica ao subcampo Struct.
Pode utilizar operadores de comparação, de intervalo e aritméticos para criar a condição, e operadores lógicos para concatenar várias condições, como mostrado em Operadores básicos.
No entanto, quando constrói uma expressão de filtro que combina um predicado ao nível da entidade e um filtro de elementos, deve colocar sempre o filtro de elementos no final, como se mostra no exemplo seguinte.
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
Operadores de família de correspondência
Os operadores de família de correspondência também funcionam num campo StructArray. Em vez de simplesmente verificar se um elemento existe, pode determinar quantos elementos (ou que proporção) devem satisfazer um predicado de elemento.
MATCH_ANY(identifier, predicate): retorna entidades que contêm pelo menos um pedaço que começa com "Red" no subcampotext; semanticamente, isso é equivalente aelement_filter.MATCH_ALL(identifier, predicate)Retorna entidades cujos subcampos de texto em todos os pedaços começam com "Vermelho".MATCH_LEAST(identifier, predicate, k)k: devolve entidades que contêm pelo menos partes que começam com "Red" no subcampotext.MATCH_MOST(identifier, predicate, k)Retorna entidades que contêm no máximokpedaços que começam com "Red" no subcampotext.MATCH_EXACT(identifier, predicate, k)MATCH_ANY: devolve entidades que contêm exatamentekpartes que começam por "Red" no subcampotext.
MATCH_ANY
Este operador é avaliado como verdadeiro se pelo menos um elemento na matriz satisfaz o predicado, o que indica que o equivalente estrutural de um OR lógico em todos os elementos da matriz.
Os operadores MATCH_ANY e os filtros de elementos são semanticamente iguais e podem ser utilizados indistintamente. Quando precisar de exprimir a lógica count(matches) >= 1, deve utilizá-los.
EXEMPLO:
O exemplo a seguir retorna entidades em que qualquer parte do documento começa com "Red".
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
Este operador é avaliado como verdadeiro apenas se todos os elementos da matriz satisfizerem o predicado.
Quando você precisa expressar a lógica count(matches) == total elements, use este operador.
EXEMPLO:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
Este operador é um filtro quantitativo que devolve verdadeiro se o número de elementos que satisfazem o predicado for maior ou igual a uma constante especificada k.
Quando precisar de exprimir a lógica count(matches) >= k, utilize este operador.
EXEMPLO:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
Este operador é um filtro quantitativo que devolve verdadeiro se o número de elementos que satisfazem o predicado for menor ou igual a uma constante especificada k.
Isto é particularmente útil para filtrar as entidades que visam demasiado uma palavra-chave específica (redução de ruído).
EXEMPLO:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
Este operador é o operador quantitativo mais restritivo da família. Ele retorna verdadeiro se e somente se o número de elementos que satisfazem o predicado é exatamente k.
EXEMPLO:
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)