FT.SEARCH

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

Per maggiori dettagli 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 tua query. Per maggiori dettagli sulla sintassi delle query, consulta Sintassi delle query.
  • (Facoltativo) NOCONTENT: restituisce solo gli ID documento, escludendo i contenuti.
  • TIMEOUT (facoltativo): consente di impostare un valore di timeout per il comando di ricerca.
  • (Facoltativo) PARAMS: 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 usi 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 dell'array restituito rappresentano i risultati migliori corrispondenti della query. Ogni elemento dell'array presenta quanto segue:

  • La chiave hash della voce

  • Un array dei seguenti:

    • Valore chiave: [$score_as ] score_value
    • Valore distanza
    • Nome dell'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 che contengono i seguenti nomi di campo e di voler trovare il vettore migliore corrispondente a un determinato vettore di input.

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