组合查询
组合查询表达式
组合查询是多种查询类型的组合,例如
您可以使用逻辑查询运算符来组合针对数字、标签和文本字段的查询表达式。对于向量字段,您可以将 KNN 查询与预过滤器组合。
本文中的示例使用以下模式
字段名称 | 字段类型 |
---|---|
描述 |
文本 |
条件 |
标签 |
价格 |
数值 |
向量 |
向量 |
与
二元运算符
(空格)用于对两个或多个表达式的结果进行交集运算。
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
向量搜索文章 提供了关于向量查询的一般详细信息。