Объяснение фильтрации

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

Основные операторы

Milvus поддерживает несколько основных операторов для фильтрации данных:

  • Операторы сравнения: ==, !=, >, <, >= и <= позволяют фильтровать данные на основе числовых или текстовых полей.

  • Фильтры диапазонов: IN и LIKE помогают найти определенные диапазоны или наборы значений.

  • Арифметические операторы: +, -, *, /, % и ** используются для вычислений с числовыми полями.

  • Логические операторы: AND, OR и NOT объединяют несколько условий в сложные выражения.

  • Операторы IS NULL и IS NOT NULL: Операторы IS NULL и IS NOT NULL используются для фильтрации полей на основе того, содержат ли они нулевое значение (отсутствие данных). Подробнее см. в разделе Основные операторы.

Пример: Фильтрация по цвету

Чтобы найти сущности с первичными цветами (красным, зеленым или синим) в скалярном поле 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, содержащее записи о средних температурах, зарегистрированных обсерваториями с 2000 года, и вы хотите найти обсерватории, в которых температура в 2009 году (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

Milvus предоставляет специализированные операторы для точного текстового поиска по полям VARCHAR:

TEXT_MATCH оператор

Оператор TEXT_MATCH позволяет осуществлять точный поиск документов на основе определенных терминов запроса. Он особенно полезен для фильтрованного поиска, сочетающего скалярные фильтры с поиском по векторному сходству. В отличие от семантического поиска, Text Match фокусируется на точных вхождениях терминов.

Milvus использует Tantivy для поддержки инвертированного индексирования и текстового поиска по терминам. Процесс включает в себя:

  1. Анализатор: Токенизирует и обрабатывает входной текст.

  2. Индексирование: Создает инвертированный индекс, сопоставляющий уникальные лексемы с документами.

Более подробную информацию см. в разделе "Сопоставление текста".

PHRASE_MATCH операторCompatible with Milvus 2.6.x

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

Более подробную информацию см. в разделе "Фразовое соответствие".

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

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

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

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