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): l'indice su cui vuoi eseguire una query.
  • query (obbligatorio): questa è la query. Per informazioni dettagliate 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.
  • [LIMIT offset num] (facoltativo): consente di scegliere la paginazione 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.

Restituisce il comando

  • Questo comando restituisce un array o un messaggio di errore. Gli elementi dell'array restituito rappresentano i risultati con la migliore corrispondenza della query. Ogni elemento dell'array contiene 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 dell'array sono costituiti solo dagli ID documento.

Esempio

Per questo esempio, supponiamo di aver creato un indice HNSW sul campo hashVec. Supponiamo che tu abbia già aggiunto alcune voci hash contenenti i seguenti nomi di campo e che tu voglia trovare il vettore di corrispondenza migliore per un determinato vettore di input.

Nomi dei campi hash:

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

Per eseguire una ricerca, utilizza 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 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);