Объяснение фильтрации
Milvus предоставляет мощные возможности фильтрации, которые позволяют выполнять точные запросы к вашим данным. Выражения фильтрации позволяют нацеливаться на определенные скалярные поля и уточнять результаты поиска с помощью различных условий. В этом руководстве объясняется, как использовать выражения фильтрации в Milvus, а примеры посвящены операциям запроса. Вы также можете применять эти фильтры в запросах на поиск и удаление.
Основные операторы
Milvus поддерживает несколько основных операторов для фильтрации данных.
Операторы сравнения:
==
,!=
,>
,<
,>=
, и<=
позволяют фильтровать данные на основе числовых, текстовых полей или полей даты.Фильтры диапазонов:
IN
иLIKE
помогают найти определенные диапазоны или наборы значений.Арифметические операторы:
+
,-
,*
,/
,%
, и `` используются для вычислений с числовыми полями.Логические операторы:
AND
,OR
, иNOT
или '&&', '||', '~', '!' объединяют несколько условий в сложные выражения.
Пример: Фильтрация по цвету
Чтобы найти сущности с первичными цветами (красным, зеленым или синим) в скалярном поле color
, используйте следующее выражение фильтра.
filter='color in ["red", "green", "blue"]'
Пример: Фильтрация полей JSON
Milvus позволяет ссылаться на ключи в полях JSON. Например, если у вас есть JSON-поле product
с ключами price
и model
, и вы хотите найти товары с определенной моделью и ценой ниже 1 850, используйте следующее выражение фильтра.
filter='product["model"] == "JSN-087" and product["price"] < 1850'
Пример: Фильтрация полей массива
Если у вас есть поле массива history_temperatures
, содержащее записи о температуре, и вы хотите найти обсерватории, в которых 10-я зарегистрированная температура превышает 23 °C, используйте это выражение.
filter='history_temperatures[10] > 23'
Дополнительные сведения об этих базовых операторах см. в разделе Базовые операторы.
Шаблоны выражений фильтрации
При фильтрации с использованием символов CJK обработка может быть более сложной из-за большего набора символов и различий в кодировке. Это может привести к снижению производительности, особенно при использовании оператора IN
.
Milvus вводит шаблонизацию выражений фильтрации для оптимизации производительности при работе с символами CJK. Отделяя динамические значения от выражения фильтра, механизм запросов более эффективно обрабатывает вставку параметров.
Пример
Чтобы найти людей старше 25 лет, проживающих в "北京" (Пекин) или "上海" (Шанхай), используйте следующее шаблонное выражение.
filter = "age > 25 and city in ['北京', '上海']"
Чтобы повысить производительность, используйте эту вариацию с параметрами.
filter = "age > {age} and city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}
Такой подход снижает накладные расходы на синтаксический разбор и повышает скорость выполнения запросов. Дополнительные сведения см. в разделе Шаблонизация фильтров.
Операторы, специфичные для типов данных
Milvus предоставляет расширенные операторы фильтрации для определенных типов данных, таких как поля JSON, ARRAY и VARCHAR.
Операторы, специфичные для полей JSON
Milvus предлагает расширенные операторы для запросов к полям JSON, обеспечивая точную фильтрацию в сложных структурах JSON.
JSON_CONTAINS(identifier, jsonExpr)
: Проверяет, существует ли выражение JSON в поле.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'
JSON_CONTAINS_ALL(identifier, jsonExpr)
: : Проверяет наличие всех элементов JSON-выражения.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'
JSON_CONTAINS_ANY(identifier, jsonExpr)
: : Фильтрует сущности, для которых в выражении JSON существует хотя бы один элемент.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'
Более подробную информацию об операторах JSON см. в разделе Операторы JSON.
Операторы, специфичные для полей ARRAY
Milvus предоставляет расширенные операторы фильтрации для полей массивов, таких как ARRAY_CONTAINS
, ARRAY_CONTAINS_ALL
, ARRAY_CONTAINS_ANY
, и ARRAY_LENGTH
, которые позволяют осуществлять тонкий контроль над данными массива.
ARRAY_CONTAINS
: : Фильтрует сущности, содержащие определенный элемент.
filter="ARRAY_CONTAINS(history_temperatures, 23)"
ARRAY_CONTAINS_ALL
: : Фильтрует сущности, в которых присутствуют все элементы списка.
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"
ARRAY_CONTAINS_ANY
: : Фильтрует сущности, содержащие любой элемент из списка.
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"
ARRAY_LENGTH
: Фильтрует на основе длины массива.
filter="ARRAY_LENGTH(history_temperatures) < 10"
Более подробную информацию об операторах массивов см. в разделе Операторы ARRAY.
Операторы, специфичные для полей VARCHAR
Оператор Text_Match
позволяет точно находить документы по определенным условиям запроса. Он особенно полезен для фильтрованного поиска, сочетающего скалярные фильтры с поиском по векторному сходству. В отличие от семантического поиска, Text Match фокусируется на точных вхождениях терминов.
Milvus использует Tantivy для поддержки инвертированного индексирования и текстового поиска по терминам. Процесс включает в себя.
Анализатор: Токенизирует и обрабатывает входной текст.
Индексирование: Создает инвертированный индекс, сопоставляющий уникальные лексемы с документами.
Более подробную информацию см. в разделе "Сопоставление текста".