FT.SEARCH

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): 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 de chiffres. Si vous n'utilisez pas ce paramètre, la valeur par défaut est LIMIT 0 10, qui renvoie 10 clés au maximum.
  • DIALECT 2 (facultatif): spécifie le 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 plus pertinents de la requête. Chaque élément du tableau comporte les éléments suivants:

  • Clé de hachage de l'entrée

  • Tableau des éléments suivants:

    • Valeur clé: [$score_as ] score_value
    • Valeur de distance
    • Nom de l'attribut
    • Valeur vectorielle

    Si NOCONTENT est utilisé, les éléments du tableau ne sont composés que des ID de document.

Exemple

Pour cet exemple, supposons que vous avez créé un index HNSW sur le champ de hachage Vec. Supposons que vous ayez déjà ajouté des entrées de hachage contenant les noms de champs suivants et que vous souhaitiez trouver le meilleur vecteur correspondant à 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 renvoyé:

[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>^-\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);