Шаблонизация фильтров
В 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
, вы можете значительно сократить время разбора сложных выражений фильтра. Это приводит к ускорению выполнения запросов и повышению общей производительности.