FT.SEARCH

FT.SEARCH pesquisa o índice com a consulta fornecida e retorna os valores especificados.

Para mais detalhes sobre a sintaxe de consulta, consulte Sintaxe de consulta.

Sintaxe

FT.SEARCH index query
  [NOCONTENT]
  [TIMEOUT timeout]
  [PARAMS nargs name value [ name value ...]]
  [LIMIT offset num]
  DIALECT 2
  • index (obrigatório): o índice que você quer consultar.
  • query (obrigatório): é a consulta. Para mais detalhes sobre a sintaxe de consulta, consulte Sintaxe de consulta.
  • NOCONTENT (opcional): retorna apenas os IDs dos documentos e exclui o conteúdo.
  • TIMEOUT (opcional): permite definir um valor de tempo limite para o comando de pesquisa.
  • PARAMS (opcional): o número de pares de chave-valor multiplicado por dois.
  • [LIMIT offset num] (opcional): permite escolher a paginação com um deslocamento e uma contagem de números. Se você não usar esse parâmetro, o padrão será LIMIT 0 10, que retorna no máximo 10 chaves.
  • DIALECT 2 (opcional): especifica o dialeto. O único dialeto compatível é o dialeto 2.

Retorno do comando

  • Esse comando retorna uma matriz ou uma mensagem de erro. Os elementos da matriz retornada representam os resultados mais bem correspondentes da consulta. Cada elemento de matriz tem o seguinte:

  • A chave de hash de entrada

  • Uma matriz do seguinte:

    • Valor da chave: [$score_as ] score_value
    • Valor da distância
    • Nome do atributo
    • Valor do vetor

    Se NOCONTENT for usado, os elementos da matriz serão apenas os IDs dos documentos.

Exemplo

Neste exemplo, suponha que você tenha criado um índice HNSW no campo de hash Vec. Suponha que você já tenha adicionado algumas entradas de hash que contêm os seguintes nomes de campo e queira encontrar o vetor com melhor correspondência para um determinado vetor de entrada.

Nomes de campos de hash:

  • Vec: o valor do campo contém o vetor real.
  • some_hash_key: alguns metadados vetoriais associados.

Para fazer uma pesquisa, use o comando FT.SEARCH:

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

Matriz de retorno:

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

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