🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Руководство пользователя
  • Home
  • Docs
  • Руководство пользователя

  • Поиск и ранжирование

  • Фильтрация

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

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

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 для поддержки инвертированного индексирования и текстового поиска по терминам. Процесс включает в себя.

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

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

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

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

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

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

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