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