FT.SEARCH

FT.SEARCH durchsucht den Index mit der angegebenen Abfrage und gibt die angegebenen Werte zurück.

Weitere Informationen zur Abfragesyntax finden Sie unter Abfragesyntax.

Syntax

FT.SEARCH index query
  [NOCONTENT]
  [TIMEOUT timeout]
  [PARAMS nargs name value [ name value ...]]
  [LIMIT offset num]
  DIALECT 2
  • index (erforderlich): Der Index, den Sie abfragen möchten.
  • query (erforderlich): Dies ist Ihre Abfrage. Weitere Informationen zur Abfragesyntax finden Sie unter Abfragesyntax.
  • NOCONTENT (optional): Damit werden nur die Dokument-IDs zurückgegeben. Der Inhalt wird dabei ausgeschlossen.
  • TIMEOUT (optional): Hier können Sie ein Zeitlimit für den Suchbefehl festlegen.
  • PARAMS (optional): Die Anzahl der Schlüssel/Wert-Paare multipliziert mit 2.
  • [LIMIT offset num] (optional): Hier können Sie die Paginierung mit einem Offset und einer Zahlenanzahl auswählen. Wenn Sie diesen Parameter nicht verwenden, wird der Standardwert LIMIT 0 10 verwendet, der maximal zehn Schlüssel zurückgibt.
  • DIALECT 2 (optional): Gibt den Dialekt an. Der einzige unterstützte Dialekt ist Dialekt 2.

Befehlsrückgabe

  • Dieser Befehl gibt ein Array oder eine Fehlermeldung zurück. Die Elemente des zurückgegebenen Arrays stellen die am besten passenden Ergebnisse der Abfrage dar. Jedes Array-Element hat Folgendes:

  • Den Hash-Schlüssel des Eintrags

  • Ein Array aus folgenden Elementen:

    • Schlüsselwert: [$score_as ] score_value
    • Entfernungswert
    • Attributname
    • Vektorwert

    Wenn NOCONTENT verwendet wird, bestehen die Array-Elemente nur aus den Dokument-IDs.

Beispiel

Angenommen, Sie haben für dieses Beispiel einen HNSW-Index für das Hash-Feld Vec erstellt. Angenommen, Sie haben bereits einige Hash-Einträge hinzugefügt, die die folgenden Feldnamen enthalten, und möchten den am besten passenden Vektor für einen bestimmten Eingabevektor ermitteln.

Hash-Feldnamen:

  • Vec: Der Feldwert enthält den tatsächlichen Vektor.
  • some_hash_key: einige zugehörige Vektormetadaten.

Verwenden Sie den Befehl FT.SEARCH, um eine Suche auszuführen:

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

Array zurückgeben:

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

Node.js-Beispiel

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