组合查询

组合查询表达式

组合查询是多种查询类型的组合,例如

您可以使用逻辑查询运算符来组合针对数字、标签和文本字段的查询表达式。对于向量字段,您可以将 KNN 查询与预过滤器组合。

注意
运算符的解释略有不同,具体取决于使用的查询方言。默认方言是DIALECT 1;有关如何更改方言版本的详细信息,请参阅这篇文章。本文使用查询方言的第二个版本DIALECT 2,并使用额外的括号((...))来帮助澄清示例。有关更多详细信息,请参阅查询语法文档

本文中的示例使用以下模式

字段名称 字段类型
描述 文本
条件 标签
价格 数值
向量 向量

二元运算符 (空格)用于对两个或多个表达式的结果进行交集运算。

FT.SEARCH index "(expr1) (expr2)"

如果您想基于特定文本字段中的多个值执行交集运算,则应使用以下简化表示法

FT.SEARCH index "@text_field:( value1 value2 ... )"

以下示例展示了一个查询,该查询查找处于全新状态且价格范围为 500 美元到 1000 美元的自行车

FT.SEARCH idx:bicycle "@price:[500 1000] @condition:{new}"

您可能还对儿童自行车感兴趣。下面的查询展示了如何将全文搜索与上一个查询中的条件结合起来

FT.SEARCH idx:bicycle "kids (@price:[500 1000] @condition:{used})"

您可以使用二元运算符|(竖线)执行并集运算。

FT.SEARCH index "(expr1) | (expr2)"
注意
在使用方言版本二时,逻辑AND优先于OR。表达式expr1 expr2 | expr3 expr4表示(expr1 expr2) | (expr3 expr4)。查询方言的第一版行为有所不同。建议在查询字符串中使用括号以确保顺序清晰。

如果您想基于单个标签或文本字段中的多个值执行并集运算,则应使用以下简化表示法

FT.SEARCH index "@text_field:( value1 | value2 | ... )"
FT.SEARCH index "@tag_field:{ value1 | value2 | ... }"

以下查询展示了如何查找包含“kids”或“small”字样的二手自行车

FT.SEARCH idx:bicycle "(kids | small) @condition:{used}"

之前的查询在所有文本字段中进行搜索。以下示例展示了如何将搜索限制在描述字段

FT.SEARCH idx:bicycle "@description:(kids | small) @condition:{used}"

如果您想将搜索扩展到新的自行车,则以下示例展示了如何操作

FT.SEARCH idx:bicycle "@description:(kids | small) @condition:{new | used}"

查询表达式前面的减号 (-) 表示否定该表达式。

FT.SEARCH index "-(expr)"

如果您想从上一个价格范围内的搜索中排除新的自行车,可以使用以下查询

FT.SEARCH idx:bicycle "@price:[500 1000] -@condition:{new}"

数值过滤器

FT.SEARCH 命令允许您将任何查询表达式与数值过滤器结合起来。

FT.SEARCH index "expr" FILTER numeric_field start end

请参阅范围查询文章,以了解更多关于数值范围查询和此类过滤器的信息。

KNN 向量查询的预过滤器

您可以将简单或更复杂的查询表达式与逻辑运算符结合起来作为 KNN 向量查询中的预过滤器。

FT.SEARCH index "(filter_expr)=>[KNN num_neighbours @field $vector]" PARAMS 2 vector "binary_data" DIALECT 2

以下是一个示例

FT.SEARCH idx:bikes_vss "(@price:[500 1000] @condition:{new})=>[KNN 3 @vector $query_vector]" PARAMS 2 "query_vector" "Z\xf8\x15:\xf23\xa1\xbfZ\x1dI>\r\xca9..." DIALECT 2

向量搜索文章 提供了关于向量查询的一般详细信息。

RATE THIS PAGE
Back to top ↑