跳到主要内容

过滤表达式模板
公测版

在 Zilliz Cloud 中,具有众多元素的复杂过滤表达式,特别是那些涉及非ASCII字符(如CJK字符)的表达式,会显着影响查询性能。为了解决这个问题,Zilliz Cloud 引入了一种过滤表达式模板机制,旨在通过减少解析复杂表达式所花费的时间来提高效率。本页解释了在搜索、查询和删除操作中使用过滤表达式模板。

概述

过滤表达式模板化允许您创建带有占位符的过滤表达式,在查询执行期间可以动态替换为值。使用模板化,您可以避免将大型数组或复杂表达式直接嵌入过滤器中,减少解析时间并提高查询性能。

假设你有一个包含两个字段的过滤表达式,年龄和城市,你想找到所有年龄大于25且居住在“北京”或“上海”的人。你可以使用模板来代替直接嵌入过滤表达式中的值:

filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}

在这里,{age}{city}是占位符,将在执行查询时替换为filter_params中的实际值。

在 Zilliz Cloud 中使用过滤表达式模板有几个关键优势:

  • 减少解析时间:通过用占位符替换大型或复杂的过滤表达式,系统花费更少的时间解析和处理过滤器。

  • 改进的查询性能:减少了解析开销,提高了查询性能,从而提高了QPS和更快的响应时间。

  • 可扩展性:随着数据集的增长和过滤表达式变得更加复杂,模板可确保性能保持高效和可扩展。

搜索操作

对于 Zilliz Cloud 中的搜索操作,过滤表达式用于定义过滤条件,filter_params参数用于指定占位符的值。filter_params字典包含 Zilliz Cloud 将用于替换到过滤表达式中的动态值。

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,
)

在此示例中,Zilliz Cloud 将在执行搜索时动态地将{age}替换为25,将{city}替换为["北京","上海"]

查询操作

相同的模板机制可以应用于 Zilliz Cloud 中的查询操作。在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,Zilliz Cloud 有效地处理值的动态插入,提高了查询执行的速度。

删除操作

您还可以在删除操作中使用过滤表达式模板。与搜索和查询类似,过滤表达式定义条件,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
)

这种方法提高了删除操作的性能,尤其是在处理复杂的过滤条件时。

小结

过滤表达式模板是 Zilliz Cloud 中优化查询性能的必备工具。通过使用占位符和filter_params字典,您可以显著减少解析复杂过滤表达式所花费的时间。这导致更快的查询执行和更好的整体性能。