FT.SEARCH
recherche dans l'index avec la requête fournie et renvoie les valeurs spécifiées.
Pour en savoir plus sur la syntaxe des requêtes, consultez Syntaxe des requêtes.
Syntaxe
FT.SEARCH index query [NOCONTENT] [TIMEOUT timeout] [PARAMS nargs name value [ name value ...]] [LIMIT offset num] DIALECT 2
index
(obligatoire): index que vous souhaitez interroger.query
(obligatoire) : il s'agit de votre requête. Pour en savoir plus sur la syntaxe des requêtes, consultez Syntaxe des requêtes.NOCONTENT
(facultatif) : cette valeur renvoie uniquement les ID de document et exclut le contenu.TIMEOUT
(facultatif): permet de définir une valeur de délai avant expiration pour la commande de recherche.PARAMS
(facultatif): nombre de paires clé-valeur multiplié par deux.[LIMIT offset num]
(facultatif) : permet de choisir la pagination avec un décalage et un nombre. Si vous n'utilisez pas ce paramètre, la valeur par défaut estLIMIT 0 10
. qui renvoie au maximum 10 clés.DIALECT 2
(facultatif) : spécifie votre dialecte. Le seul dialecte pris en charge est le dialecte 2.
Retour de commande
Cette commande renvoie un tableau ou un message d'erreur. Les éléments du tableau renvoyé représentent les résultats les mieux adaptés à la requête. Chaque élément du tableau comporte les éléments suivants :
Clé de hachage d'entrée
Tableau des éléments suivants:
- Valeur clé : [$score_as ] score_value
- Valeur de distance
- Nom de l'attribut
- Valeur du vecteur
Si
NOCONTENT
est utilisé, les éléments du tableau ne contiennent que les ID de document.
Exemple
Pour cet exemple, supposons que vous ayez créé un indice HNSW sur le champ de hachage Vec
. Supposons que vous ayez déjà ajouté des entrées de hachage contenant les noms de champ suivants et que vous souhaitiez trouver le vecteur le mieux adapté à un vecteur d'entrée donné.
Noms des champs de hachage :
Vec
: la valeur du champ contient le vecteur réel.some_hash_key
: certaines métadonnées vectorielles associées.
Pour exécuter une recherche, utilisez la commande FT.SEARCH
:
FT.SEARCH idx "*=>[KNN 3 @vec $BLOB EF_RUNTIME 40 AS score]" PARAMS 2 BLOB "\x12\xa9\xf5\x6c" DIALECT 2
Tableau de retour :
[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']]
Exemple 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);