FT.SEARCH
使用提供的查询表达式查找索引中的键。查找到键后,可以返回这些键中已编入索引的字段数量和/或内容。有关更多信息,请参阅向量搜索查询表达式。
要创建在这些示例中使用的数据,请参阅 FT.CREATE 命令。
语法
FT.SEARCH <index-name> <query> [RETURN <token_count> (<field-identifier> [AS <alias>])+] [TIMEOUT timeout] [PARAMS <count> <name> <value> [<name> <value>]] [LIMIT <offset> <count>] [COUNT]
RETURN:此子句确定返回键的哪些字段。每个字段的可选 AS 子句会在结果中覆盖该字段的名称。只能指定已为此索引声明的字段。
LIMIT: <offset><count>:此子句提供分页功能,仅返回满足偏移量和计数值的键。如果省略此子句,则默认为“LIMIT 0 10”,即最多返回 10 个键。
PARAMS:键值对数量的两倍。可以在查询表达式中引用参数键/值对。有关更多信息,请参阅向量搜索查询表达式。
COUNT:此子句不返回键的内容,只返回键的数量。这就相当于使用“LIMIT 0 0”。
Return
返回数组或错误响应。
如果操作成功完成,则返回一个数组。第一个元素是与查询匹配的键的总数。其余元素是键名称和字段列表配对。字段列表是另一个数组,包含字段名称和对应值的配对。
如果索引正在回填,该命令会立即返回错误响应。
如果超时,该命令将返回错误响应。
示例:进行一些搜索
注意
以下示例使用 valkey-cli
哈希值搜索
FT.SEARCH hash_idx1 "*=>[KNN 2 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2 1) (integer) 2 2) "hash:0" 3) 1) "__VEC_score" 2) "0" 3) "vec" 4) "\x00\x00\x00\x00\x00\x00\x00\x00" 4) "hash:1" 5) 1) "__VEC_score" 2) "1" 3) "vec" 4) "\x00\x00\x00\x00\x00\x00\x80\xbf"
将生成两个结果,按分数排序,即按与查询向量的距离(以十六进制输入)排序。
JSON 搜索
FT.SEARCH json_idx1 "*=>[KNN 2 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2 1) (integer) 2 2) "json:2" 3) 1) "__VEC_score" 2) "11.11" 3) "$" 4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]" 4) "json:0" 5) 1) "__VEC_score" 2) "91" 3) "$" 4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]"
将生成两个最接近的结果,按分数排序,请注意,JSON 向量值会转换为浮点数,查询向量仍然是向量数据。另请注意,由于 KNN
参数为 2,因此只返回两个结果。值越大,返回的结果越多:
FT.SEARCH json_idx1 "*=>[KNN 100 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2 1) (integer) 3 2) "json:2" 3) 1) "__VEC_score" 2) "11.11" 3) "$" 4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]" 4) "json:0" 5) 1) "__VEC_score" 2) "91" 3) "$" 4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]" 6) "json:1" 7) 1) "__VEC_score" 2) "9100" 3) "$" 4) "[{\"vec\":[10.0, 20.0, 30.0, 40.0, 50.0, 60.0]}]"