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 paginação com um deslocamento e uma contagem numérica. 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 aceito é 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

Para este exemplo, suponha que você criou um índice HNSW no campo hash Vec: Suponha que você já tenha adicionado algumas entradas de hash que contêm nomes de campos e quiser encontrar o melhor vetor que corresponda a uma determinada entrada vetor.

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