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>^-\xe5xK?\xbb\xa3\r>\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);