FT.SEARCH

FT.SEARCH esegue la ricerca nell'indice con la query fornita e restituisce i valori specificati.

Per informazioni dettagliate sulla sintassi delle query, consulta Sintassi delle query.

Sintassi

FT.SEARCH index query
  [NOCONTENT]
  [TIMEOUT timeout]
  [PARAMS nargs name value [ name value ...]]
  [LIMIT offset num]
  DIALECT 2
  • index (obbligatorio): questo indice su cui vuoi eseguire una query.
  • query (obbligatorio): questa è la query. Per maggiori dettagli sulla sintassi delle query, consulta Sintassi delle query.
  • NOCONTENT (facoltativo): restituisce solo gli ID documento ed esclude i contenuti.
  • TIMEOUT (facoltativo): consente di impostare un valore di timeout per il comando di ricerca.
  • PARAMS (facoltativo): il numero di coppie chiave-valore moltiplicato per due.
  • (Facoltativo) [LIMIT offset num]: consente di scegliere l'impaginazione con un offset e un conteggio numerico. Se non utilizzi questo parametro, il valore predefinito è LIMIT 0 10, che restituisce al massimo 10 chiavi.
  • DIALECT 2 (facoltativo): specifica il dialetto. L'unico dialetto supportato è il dialetto 2.

Invio del comando

  • Questo comando restituisce un array o un messaggio di errore. Gli elementi del l'array restituito rappresentano i risultati con la migliore corrispondenza della query. Ogni array presenta quanto segue:

  • La chiave hash della voce

  • Un array dei seguenti elementi:

    • Valore chiave: [$score_as ] score_value
    • Valore distanza
    • Nome attributo
    • Valore del vettore

    Se viene utilizzato NOCONTENT, gli elementi array sono costituiti solo dagli ID documento.

Esempio

Per questo esempio, supponiamo che tu abbia creato un indice HNSW nel campo hash Vec. Supponi di aver già aggiunto alcune voci Hash contenenti quanto segue: campi e vorresti trovare il vettore migliore corrispondente a un determinato input vettoriale.

Nomi dei campi hash:

  • Vec: il valore del campo contiene il vettore effettivo.
  • some_hash_key: alcuni metadati vettoriali associati.

Per eseguire una ricerca, usa il comando FT.SEARCH:

FT.SEARCH idx "*=>[KNN 3 @vec $BLOB EF_RUNTIME 40 AS score]" PARAMS 2 BLOB
"\x12\xa9\xf5\x6c" DIALECT 2

Array restituito:

[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']]

Esempio di 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);