FT.SEARCH
会使用提供的查询搜索索引,并返回指定的值。
如需详细了解查询语法,请参阅查询语法。
语法
FT.SEARCH index query [NOCONTENT] [TIMEOUT timeout] [PARAMS nargs name value [ name value ...]] [LIMIT offset num] DIALECT 2
index
(必填):您要查询的索引。query
(必需):这是您的查询。如需详细了解查询语法,请参阅查询语法。NOCONTENT
(可选):仅返回文档 ID,不返回内容。TIMEOUT
(可选):允许您为搜索命令设置超时值。PARAMS
(可选):键值对的数量乘以 2。[LIMIT offset num]
(可选):可让您选择具有偏移量和 数字。如果您不使用此参数,则默认值为LIMIT 0 10
,最多返回 10 个按键。DIALECT 2
(可选):指定方言。唯一支持的方言是方言 2。
命令返回
此命令会返回数组或错误消息。元素 返回的数组代表与查询最匹配的结果。每个数组元素都具有以下属性:
条目哈希键
包含下列各项的数组:
- 键值对:[$score_as ] score_value
- 距离值
- 属性名称
- 矢量值
如果使用
NOCONTENT
,则数组元素仅包含文档 ID。
示例
在此示例中,假设您在哈希字段 Vec
上创建了 HNSW 索引。假设您已添加了一些包含以下字段名称的哈希条目,并且希望查找与给定输入向量最匹配的向量。
哈希字段名称:
Vec
- 字段值包含实际矢量。some_hash_key
- 一些关联的矢量元数据。
如需运行搜索,请使用 FT.SEARCH
命令:
FT.SEARCH idx "*=>[KNN 3 @vec $BLOB EF_RUNTIME 40 AS score]" PARAMS 2 BLOB "\x12\xa9\xf5\x6c" DIALECT 2
返回数组:
[3, b'key_192', [b'__embedding_score', b'0.061539709568', b'embedding', b'd\xdeA?\xb7\\xbb>!\xb3\xd8>0\x94n?\xbd\xbco=WX\xe4>kN\x9e>\x1aV0>Z\x92*?\rD\x04>', b'some_hash_key', b'some_hash_key_value_192'], b'key_209', [b'__embedding_score', b'0.0803312063217', b'embedding', b's\xe1W?\xa4\x1d\xad>\xb8\x99Q?\xa9u ?6\xc8\xb2>=j5?!\x13\x96>~\x13\xb9=\xebcX?\x92\x86\xb8>', b'some_hash_key', b'some_hash_key_value_209'], b'key_821', [b'__embedding_score', b'0.0615693926811', b'embedding', b')\x1e\x03?\xa6\x10\xe0>^-\xe5xK?\xbb\xa3\r>\xa1\x00\x87>\x18u\xa2=\x06\xa2;>,\xeb=?\x0e%\xa4>', b'some_hash_key', b'some_hash_key_value_821']]
Nodejs 示例
const Redis = require("ioredis"); const redis = new Redis(); const searchResult = await redis.call("FT.SEARCH", "idx", "*=>[KNN 3 @vector $BLOB EF_RUNTIME 40 AS score]", "PARAMS", "2", "BLOB", "\x00\x00\x00\x00", "DIALECT", "2"); console.log(searchResult);