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
(省略可): Key-Value ペアの数に 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']]
Node.js の例:
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);