组合查询

组合查询表达式

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

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

注意

根据所使用的查询方言,运算符的解释略有不同。默认方言是DIALECT 1;有关如何更改方言版本的信息,请参阅本文。本文使用查询方言的第二个版本,即DIALECT 2,并使用其他方括号 ((...)) 来帮助阐明示例。可以在查询语法文档中找到更多详细信息。

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

字段名称 字段类型
说明 TEXT
condition TAG
price NUMERIC
vector VECTOR

AND

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

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})"

OR

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

FT.SEARCH index "(expr1) | (expr2)"
注意

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

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

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

以下查询显示如何查找包含单词“儿童”或“小”的二手自行车

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}"

NOT

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

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

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

对本页进行评分