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, revisa Sintaxis de consultas.

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 será LIMIT 0 10. que devuelve como máximo 10 claves.
  • DIALECT 2 (opcional): Especifica el dialecto. El único dialecto admitido es el dialecto 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 documento.

Ejemplo

Para este ejemplo, supongamos que creaste un índice HNSW en el campo hash Vec Supongamos que ya agregaste algunas entradas hash que contienen lo siguiente nombres de campos y quieres encontrar el mejor vector que coincida con una entrada determinada .

Nombres de campos de hash:

  • Vec: El valor del campo contiene el vector real.
  • some_hash_key: Algunos metadatos vectoriales 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);