FT.SEARCH
searches the index with the provided query, and returns the
specified values.
For details on query syntax, see Query syntax.
Syntax
FT.SEARCH index query [NOCONTENT] [TIMEOUT timeout] [PARAMS nargs name value [ name value ...]] [LIMIT offset num] DIALECT 2
index
(required): This index you want to query.query
(required): This is your query. For details on query syntax, see Query syntax.NOCONTENT
(optional): This returns just the document IDs, and excludes the content.TIMEOUT
(optional): Lets you set a timeout value for the search command.PARAMS
(optional): The number of key value pairs times two.[LIMIT offset num]
(optional): Lets you choose pagination with an offset and a number count. If you don't use this parameter, the default isLIMIT 0 10
, which returns at the most 10 keys.DIALECT 2
(optional): Specifies your the dialect. The only supported dialect is dialect 2.
Command return
This command returns an array or an error message. The elements of the returned array represent the best matched results of the query. Each array element has the following:
The entry hash key
An array of the following:
- Key value: [$score_as ] score_value
- Distance value
- Attribute name
- Vector value
If
NOCONTENT
is used, the array elements consist of just the document IDs.
Example
For this example, assume that you created an HNSW index on the hash field
Vec
. Suppose you already added some Hash entries which contain the following
field names, and would like to find the best matching vector to a given input
vector.
Hash field names:
Vec
- the field value contains the actual vector.some_hash_key
- Some associated vector metadata.
To run a search use the FT.SEARCH
command:
FT.SEARCH idx "*=>[KNN 3 @vec $BLOB EF_RUNTIME 40 AS score]" PARAMS 2 BLOB "\x12\xa9\xf5\x6c" DIALECT 2
Return array:
[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 example
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);