Операторы массива структурCompatible with Milvus 3.0.x

Массив структур, или StructArray, в сущности хранит упорядоченный набор элементов Struct. Каждая структура в массиве имеет одну и ту же предопределенную схему, состоящую из нескольких векторов и скалярных полей. Когда скалярное подполе в Struct проиндексировано, вы можете использовать фильтры элементов и операторы семейства match для выполнения скалярной фильтрации по нему.

Фильтр элементов выбирает объекты, содержащие хотя бы одно значение в поле StructArray, соответствующее заданному предикату. В отличие от этого, операторы семейства match используются для поиска сущностей, содержащих определенное количество или пропорцию значений в поле StructArray, соответствующих указанному предикату.

При построении предикатов по адресу $[subField] убедитесь, что подполе проиндексировано, если вы работаете с большими наборами данных, поскольку эти операторы требуют итерации по элементам массива для каждой сущности-кандидата.

Фильтр элементов

Используйте фильтры элементов, когда вам нужно проверить, содержит ли сущность значения, соответствующие определенному предикату, в ее поле StructArray.

element_filter(chunks, $[text] LIKE "Red%")

Как показано в приведенном выше выражении фильтра элементов, фильтр элементов возвращает сущности, которые содержат хотя бы один чанк, начинающийся с "Red" в подполе text. Первый параметр - это имя поля StructArray, а второй параметр - предикат, применяемый к подполю Struct.

Для построения условия можно использовать операторы сравнения, диапазона и арифметические операторы, а также логические операторы для объединения нескольких условий, как показано в разделе "Основные операторы".

Однако при построении выражения фильтрации, сочетающего предикат уровня сущности и фильтр элемента, всегда следует помещать флтлер элемента в конец, как показано в следующем примере.

# correct
id > 0 && element_filter(chunks, $[x] > 1)

# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0

Операторы семейства совпадений

Операторы семейства совпадений работают и над полем StructArray. Вместо того чтобы просто проверять, существует ли элемент, вы можете определить, сколько элементов (или какая доля) должны удовлетворять предикату элемента.

  • MATCH_ANY(identifier, predicate): возвращает сущности, которые содержат хотя бы один чанк, начинающийся с "Red" в подполе text; семантически это эквивалентно element_filter.

  • MATCH_ALL(identifier, predicate): возвращает сущности, чьи текстовые подполя во всех чанках начинаются с "Red".

  • MATCH_LEAST(identifier, predicate, k): возвращает сущности, содержащие не менее k блоков, которые начинаются с "Red" в подполе text.

  • MATCH_MOST(identifier, predicate, k): возвращает сущности, содержащие не более k блоков, которые начинаются с "Red" в подполе text.

  • MATCH_EXACT(identifier, predicate, k): возвращает сущности, содержащие ровно k фрагментов, начинающихся с "Red" в подполе text.

MATCH_ANY

Этот оператор оценивается как true, если хотя бы один элемент массива удовлетворяет предикату, что указывает на структурный эквивалент логического OR по всем элементам массива.

Операторы MATCH_ANY и фильтры элементов семантически одинаковы, и вы можете использовать их как взаимозаменяемые. Когда необходимо выразить логику count(matches) >= 1, следует использовать их.

ПРИМЕР:

В следующем примере возвращаются сущности, в которых любая часть документа начинается с "Red".

MATCH_ANY(chunks, $[text] LIKE 'Red%')

MATCH_ALL

Этот оператор принимает значение true только в том случае, если каждый элемент массива удовлетворяет предикату.

Когда необходимо выразить логику count(matches) == total elements, используйте этот оператор.

ПРИМЕР:

MATCH_ALL(chunks, $[text] LIKE 'Red%')

MATCH_LEAST

Этот оператор представляет собой количественный фильтр, который возвращает true, если количество элементов, удовлетворяющих предикату, больше или равно заданной константе kk k.

Когда вам нужно выразить логику count(matches) >= k, используйте этот оператор.

ПРИМЕР:

MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)

СОВПАДЕНИЕ_САМОГО

Этот оператор представляет собой количественный фильтр, который возвращает true, если количество элементов, удовлетворяющих предикату, меньше или равно заданной константе kk k.

Это особенно полезно для отсеивания сущностей, которые слишком сильно нацелены на определенное ключевое слово (подавление шума).

ПРИМЕР:

MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)

СОВПАДЕНИЕ_ЭКЗАМЕНА

Этот оператор является самым строгим количественным оператором в семействе. Он возвращает true тогда и только тогда, когда количество элементов, удовлетворяющих предикату, составляет ровно kk k.

ПРИМЕР:

MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?