Шаблонизация фильтров
В Milvus сложные выражения фильтров с большим количеством элементов, особенно те, в которых используются символы не ASCII, например CJK, могут существенно повлиять на производительность запросов. Для решения этой проблемы в Milvus внедрен механизм шаблонизации выражений фильтров, предназначенный для повышения эффективности за счет сокращения времени, затрачиваемого на разбор сложных выражений. На этой странице рассказывается об использовании шаблонов выражений фильтров в операциях поиска, запроса и удаления.
Обзор
Шаблонизация выражений фильтра позволяет создавать выражения фильтра с заполнителями, которые могут динамически подставляться в значения во время выполнения запроса. Использование шаблонов позволяет избежать встраивания больших массивов или сложных выражений непосредственно в фильтр, что сокращает время разбора и повышает производительность запроса.
Допустим, у вас есть выражение фильтра, включающее два поля age и city, и вы хотите найти всех людей, чей возраст больше 25 лет и которые живут либо в "北京" (Пекин), либо в "上海" (Шанхай). Вместо того чтобы напрямую вставлять значения в выражение фильтра, можно использовать шаблон:
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
Здесь {age} и {city} - это заполнители, которые будут заменены реальными значениями в filter_params при выполнении запроса.
Использование шаблонов выражений фильтров в Milvus имеет несколько ключевых преимуществ:
Сокращение времени разбора: заменяя большие или сложные выражения фильтра на шаблоны, система тратит меньше времени на разбор и обработку фильтра.
Повышение производительности запросов: Благодаря уменьшению накладных расходов на парсинг повышается производительность запросов, что приводит к повышению QPS и ускорению времени отклика.
Масштабируемость: По мере роста наборов данных и усложнения выражений фильтров шаблонизация обеспечивает эффективность и масштабируемость производительности.
Поисковые операции
Для операций поиска в Milvus выражение filter используется для определения условия фильтрации, а параметр filter_params - для задания значений для заполнителей. Словарь filter_params содержит динамические значения, которые Milvus будет использовать для подстановки в выражение фильтра.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.search(
"hello_milvus",
vectors[:nq],
filter=expr,
limit=10,
output_fields=["age", "city"],
search_params={"metric_type": "COSINE", "params": {"search_list": 100}},
filter_params=filter_params,
)
В этом примере Milvus динамически заменит {age} на 25 и {city} на ["北京", "上海"] при выполнении поиска.
Операции запроса
Тот же механизм шаблонизации может быть применен к операциям запроса в Milvus. В функции query вы определяете выражение фильтрации и используете filter_params для указания значений для подстановки.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.query(
"hello_milvus",
filter=expr,
output_fields=["age", "city"],
filter_params=filter_params
)
Используя filter_params, Milvus эффективно обрабатывает динамическую вставку значений, повышая скорость выполнения запроса.
Операции удаления
Вы также можете использовать шаблонизацию выражений фильтра в операциях удаления. Как и в поиске и запросе, выражение filter определяет условия, а filter_params предоставляет динамические значения для заполнителей.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
Такой подход повышает производительность операций удаления, особенно при работе со сложными условиями фильтрации.
Заключение
Шаблонирование выражений фильтра является важным инструментом для оптимизации производительности запросов в Milvus. Используя заполнители и словарь filter_params, вы можете значительно сократить время разбора сложных выражений фильтра. Это приводит к ускорению выполнения запросов и повышению общей производительности.