组合查询

组合查询表达式

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

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

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

本文中的示例使用以下 schema

字段名 字段类型
description TEXT
condition TAG
price NUMERIC
vector VECTOR

AND

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

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

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

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

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

您可能也对儿童自行车感兴趣。以下查询展示了如何将全文搜索与上一个查询的条件结合使用

OR

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

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' 的二手自行车

上一个查询搜索所有文本字段。以下示例展示了如何将搜索限制在 description 字段

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

NOT

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

FT.SEARCH index "-(expr)"

如果您想从之前的价格范围内排除新自行车,可以使用此查询

数值过滤器

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

这是一个示例

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

评价此页
返回顶部 ↑