FT.SEARCH

FT.SEARCH busca en el índice con la consulta proporcionada y muestra los valores especificados.

Para obtener detalles sobre la sintaxis de consulta, consulta Sintaxis de consulta.

Sintaxis

FT.SEARCH index query
  [NOCONTENT]
  [TIMEOUT timeout]
  [PARAMS nargs name value [ name value ...]]
  [LIMIT offset num]
  DIALECT 2
  • index (obligatorio): Es el índice que deseas consultar.
  • query (obligatorio): Esta es tu consulta. Para obtener detalles sobre la sintaxis de consulta, consulta Sintaxis de consulta.
  • NOCONTENT (opcional): Muestra solo los IDs de los documentos y excluye el contenido.
  • TIMEOUT (opcional): Te permite establecer un valor de tiempo de espera para el comando de búsqueda.
  • PARAMS (opcional): Es la cantidad de pares clave-valor multiplicada por dos.
  • [LIMIT offset num] (opcional): Te permite elegir la paginación con un desplazamiento y un recuento de números. Si no usas este parámetro, el valor predeterminado es LIMIT 0 10, que muestra como máximo 10 claves.
  • DIALECT 2 (opcional): Especifica el dialecto. El único dialecto compatible es el 2.

Comando de retorno

  • Este comando muestra un array o un mensaje de error. Los elementos del array que se muestra representan los resultados de la consulta que mejor coinciden. Cada elemento del array tiene lo siguiente:

  • La clave de hash de entrada

  • Un array de lo siguiente:

    • Valor clave: [$score_as ] score_value
    • Valor de distancia
    • Nombre del atributo
    • Valor vectorial

    Si se usa NOCONTENT, los elementos del array consisten solo en los IDs de los documentos.

Ejemplo

En este ejemplo, supongamos que creaste un índice de HNSW en el campo de hash Vec. Supongamos que ya agregaste algunas entradas de hash que contienen los siguientes nombres de campo y deseas encontrar el vector que mejor coincida con un vector de entrada determinado.

Nombres de campos de hash:

  • Vec: El valor del campo contiene el vector real.
  • some_hash_key: Algunos metadatos de vectores asociados.

Para ejecutar una búsqueda, usa el 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 de devolución:

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

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