组合查询

组合查询表达式

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

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

注意:
根据使用的查询方言,操作符的解释略有不同。默认方言是DIALECT 1;有关如何更改方言版本的信息,请参阅这篇文章。本文使用查询方言的第二版DIALECT 2,并使用额外的括号((...))来帮助澄清示例。更多详细信息可以在查询语法文档中找到。

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

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

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

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

如果你想基于特定文本字段内的多个值执行交集操作,那么你应该使用以下简化表示法:

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

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

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

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

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

这是一个示例:

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

RATE THIS PAGE
Back to top ↑