FT.SEARCH - 适用于 Redis 的 Amazon MemoryDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

FT.SEARCH

使用提供的查询表达式查找索引中的键。查找到键后,可以返回这些键中已编入索引的字段数量和/或内容。有关更多信息,请参阅向量搜索查询表达式

要创建用于这些示例的数据,请参阅 FT.C REATE 命令。

语法

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

返回数组或错误响应。

  • 如果操作成功完成,则返回一个数组。第一个元素是与查询匹配的键的总数。其余元素是键名称和字段列表配对。字段列表是另一个数组,包含字段名称和对应值的配对。

  • 如果索引正在回填,该命令会立即返回错误响应。

  • 如果超时,该命令将返回错误响应。

示例:进行一些搜索

注意

以下示例使用 redis-cli 的原生参数,例如在将数据发送到 Redis 前,对数据去引号和去转义。要使用其他编程语言客户端(Python、Ruby、C# 等),请遵循这些环境处理字符串和二进制数据的处理规则。有关支持的客户端的更多信息,请参阅构建工具 Amazon

哈希搜索

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