Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Comandos do TairSearch

Última atualização: Aug 20, 2026

O TairSearch é um módulo de busca full-text integrado ao Tair (Redis OSS-Compatible). Ele utiliza uma sintaxe de consulta semelhante à do Elasticsearch e oferece desempenho de escrita e busca em nível de milissegundos.

Visão geral

O TairSearch oferece os seguintes recursos:

  • Baixa latência e alto desempenho: Escrita e busca full-text em nível de milissegundos, impulsionadas pelo mecanismo em memória do Tair. Para mais detalhes, consulte TairSearch performance whitepaper.

  • Atualizações incrementais e parciais: Adicione, atualize, remova e incremente automaticamente campos individuais de documentos sem reescrever todo o documento.

  • Sintaxe de consulta semelhante ao Elasticsearch: Query DSL baseada em JSON com suporte a bool, match, term, paginação e ordenação — familiar para desenvolvedores com experiência em Elasticsearch.

  • Agregação: Agregações terms, de métricas e filter para análises sobre os resultados da busca. Consulte Aggregations.

  • Autocompletar: Correspondência difusa baseada em prefixo para experiências de busca enquanto você digita.

  • Analisadores integrados e personalizados: Analisadores integrados para inglês (standard, stop), chinês (jieba, IK) e outros idiomas. Também há suporte para analisadores personalizados com dicionários e stop words definidos pelo usuário. Para mais detalhes, consulte Search analyzers.

  • Consulta em índices fragmentados: Pesquise em múltiplos índices de shard com TFT.MSEARCH e obtenha resultados agregados.

  • Compressão de documentos: Comprima documentos armazenados para reduzir o uso de memória. Desativado por padrão.

  • Cache de consultas: Armazene em cache resultados de consultas recentes para melhorar o desempenho em dados frequentes.

Pré-requisitos

A instância deve ser uma memory-optimized instance do Tair (baseada em DRAM) executando uma das seguintes versões:

Versão do mecanismo

Versão secundária mínima

Compatível com Redis 5.0

1.7.27 ou posterior

Compatível com Redis 6.0

6.2.4.1 ou posterior

Compatível com Redis 7.0

Todas as versões secundárias

Atualize a instância para a versão secundária mais recente para obter o maior número de recursos e a melhor estabilidade. Para instruções, consulte Upgrade minor and proxy versions . Em instâncias cluster ou com divisão de leitura/escrita, atualize também os nós proxy para a versão secundária mais recente para garantir que todos os comandos funcionem conforme o esperado.

Notas de versão

Instâncias baseadas em DRAM compatíveis com Redis 5.0

Data

Versão

Alterações

2022-03-11

V1.7.27

Lançamento do TairSearch

2022-05-24

V1.8.5

Recurso de agregação

2022-09-06

V5.0.15

Comando TFT.MSEARCH

2023-01-13

V5.0.25

Analisadores

2023-03-15

V5.0.28

Cache de consultas, compressão de documentos, comando TFT.ANALYZER

2023-06-12

V5.0.35

Tipo de dado ARRAY, algoritmo de similaridade Okapi BM25

Instâncias baseadas em DRAM compatíveis com Redis 6.0

Data

Versão

Alterações

2023-02-07

V6.2.4.1

TairSearch (todos os recursos da V5.0.25)

2023-03-14

V6.2.5.0

Cache de consultas, compressão de documentos, TFT.ANALYZER (todos os recursos da V5.0.28)

2023-06-12

V6.2.7.3

Tipo de dado ARRAY, Okapi BM25 (todos os recursos da V5.0.35)

2023-12-21

V23.12.1.2

Comando TFT.EXPLAINSCORE

Instâncias baseadas em DRAM compatíveis com Redis 7.0

Data

Versão

Alterações

2024-07-22

V24.7.0.0

Suporte ao TairSearch

Melhores práticas

Observações de uso

  • Os dados do TairSearch são armazenados na instância Tair e consomem memória da instância.

  • Para reduzir o uso de memória:

    • Defina index como true apenas para campos que precisam ser pesquisáveis. Defina index como false para os demais campos.

    • Utilize _source com padrões includes/excludes para armazenar somente os campos necessários do documento.

    • Escolha um analisador adequado para evitar tokenização desnecessária e aumento no consumo de memória.

    • Ative a compressão de documentos grandes.

  • Mantenha o número de documentos por índice abaixo de 5 milhões. Isso evita distorção de dados em instâncias cluster, equilibra requisições de leitura e escrita e reduz chaves grandes e hotkeys. Divida grandes conjuntos de dados em múltiplos índices e use TFT.MSEARCH para consultá-los em conjunto.

Convenções de sintaxe

Convenção

Significado

MAIÚSCULAS

Palavra-chave do comando

itálico

Variável

[opções]

Parâmetro opcional. Parâmetros sem colchetes são obrigatórios.

`A\

B`

Parâmetros mutuamente exclusivos. Especifique apenas um.

...

O parâmetro anterior pode ser repetido.

Comandos de busca full-text

TFT.CREATEINDEX

Crie um índice com uma definição de mapeamento. A sintaxe de mapeamento é semelhante ao mapeamento explícito do Elasticsearch. É necessário criar um índice antes de adicionar documentos.

Sintaxe

TFT.CREATEINDEX index mappings [settings]
Para evitar chaves grandes, divida índices extensos em índices menores com mappings e settings idênticos e consulte-os em conjunto com TFT.MSEARCH .

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice a ser criado.

mappings

Sim

Definição de mapeamento em JSON. Consulte Opções de mapeamento.

settings

Não

Configurações JSON para o índice. Consulte Configurações do índice.

Opções de mapeamento

O objeto mappings suporta os seguintes campos de nível superior:

dynamic

Modo de mapeamento. Valores válidos:

  • "strict" -- Dados só podem ser escritos em campos definidos em properties. A escrita em campos não definidos falha.

  • Não especificado (padrão) -- Modo não estrito. O sistema não verifica se os campos escritos estão definidos em properties.

enabled

Controla a verificação de tipo para campos não indexados (index definido como false). Valores válidos: true (padrão) e false. Quando true, uma escrita falha se o tipo do campo não corresponder ao tipo definido em properties. Campos indexados sempre passam por verificação de tipo, independentemente desta configuração.

_source

Controla se o documento original é armazenado. Esta configuração não afeta a criação do índice.

  • enabled -- true (padrão) armazena o documento original. false não o armazena.

  • includes -- Um array de padrões de nomes de campos a incluir. Há suporte para curingas.

  • excludes -- Um array de padrões de nomes de campos a excluir. Há suporte para curingas. Se um campo corresponder tanto a includes quanto a excludes, excludes tem precedência (o campo não é armazenado).

Exemplos:

"_source": {"enabled": true}

Esta é a configuração padrão — armazena todos os campos. Equivalente a "_source": {"enabled": true, "excludes": [], "includes": []}.

"_source": {"enabled": true, "excludes": [], "includes": ["id", "name"]}

Armazena apenas os campos id e name.

properties

Coleção de definições de campos. Cada campo suporta os seguintes atributos:

Atributo

Descrição

Padrão

type

Tipo de dado. Consulte Tipos de campo.

Obrigatório

index

Indica se este campo é indexado (pesquisável). true ou false.

true

boost

Peso do campo para pontuação. Número de ponto flutuante positivo.

1

similarity

Algoritmo de similaridade: "classic" (TF-IDF) ou "BM25" (Okapi BM25).

"classic"

Tipos de campo

Tipo

Descrição

Opções específicas do tipo

keyword

String que não é tokenizada. Adequada para consultas de correspondência exata.

ignore_above: Comprimento máximo da string. Padrão: 128.

text

String tokenizada por um analisador antes da indexação.

analyzer, search_analyzer. Consulte Opções de analisador de texto.

long

Inteiro de 64 bits. Adequado para timestamps (Unix epoch).

--

integer

Inteiro de 32 bits.

--

double

Número de ponto flutuante de 64 bits. NaN, Inf e -Inf não são suportados.

--

Suporte a ARRAY: Todos os tipos de campo suportam variantes de array. Acrescente [] ao nome do tipo. Por exemplo, keyword[] declara um array de keywords.

TFT.CREATEINDEX idx:products '{"mappings":{"properties":{"tags":{"type":"keyword[]"}}}}'

Opções de analisador de texto

Opção

Descrição

Padrão

analyzer

Analisador usado para indexação. Consulte Built-in analyzers. Também é possível especificar analisadores personalizados, configurados pela seção analysis em settings.

"standard"

search_analyzer

Analisador usado no momento da busca. Mesmos valores válidos de analyzer.

Igual a analyzer

Analisadores integrados

standard (padrão), jieba (recomendado para chinês, funciona melhor que chinese), stop, IK, pattern, whitespace, simple, keyword, chinese, french, dutch, russian.

Para mais detalhes, consulte Built-in analyzers.

Configurações do índice

O objeto opcional settings suporta os seguintes campos:

analysis

Define analisadores personalizados. Para mais detalhes, consulte Custom analyzers.

index

Configura algoritmos de similaridade personalizados. Use esta opção para personalizar os parâmetros do Okapi BM25:

Parâmetro

Descrição

Padrão

Valores válidos

k1

Controla o quanto a frequência do termo afeta a pontuação. Valores maiores aumentam o efeito.

1.2

Maior que 0

b

Controla o quanto o comprimento do documento afeta a pontuação. Valores maiores aumentam o efeito.

0.75

De 0 a 1

Exemplo:

TFT.CREATEINDEX idx:products '{"mappings":{"properties":{"name":{"type":"keyword","similarity":"my_bm25"}}},"settings":{"index":{"similarity":{"my_bm25":{"type":"BM25","k1":1.0,"b":1.0}}}}}'

queries_cache

Configura o cache de resultados de consulta. Por padrão, o cache armazena até 10.000 resultados sem limite de memória. Quando cheio, os resultados são removidos usando o algoritmo Least Recently Used (LRU).

Parâmetro

Tipo

Descrição

Padrão

size

STRING

Memória máxima para todos os caches de consulta. Suporta unidades "bytes", "kb" e "mb". Exemplos: "1000" (1.000 bytes), "10kb", "1mb".

Sem limite

ttl

INTEGER

Tempo de vida dos resultados em cache, em segundos.

10

Exemplo:

"settings": {"queries_cache": {"size": "100mb", "ttl": 3}}
queries_cache é um parâmetro de nível de nó. Configurá-lo em um índice afeta todos os outros índices no mesmo processo. Utilize a mesma configuração de queries_cache em todos os índices.

compress_doc

Configura a compressão transparente de documentos. Ativar a compressão aumenta o consumo de CPU e a latência de leitura/escrita. Ative esta opção apenas quando o índice for grande (quilobytes ou mais) e o custo de armazenamento for a principal preocupação.

Parâmetro

Tipo

Descrição

Padrão

size

STRING

Limiar de compressão. Documentos são comprimidos apenas quando atingem este tamanho. Suporta unidades "bytes", "kb" e "mb".

"10kb"

enable

BOOLEAN

Se deve ativar a compressão.

false

Exemplo:

"settings": {"compress_doc": {"size": "1kb", "enable": true}}
A compressão aplica-se apenas a documentos escritos ou atualizados após você ativar a configuração com TFT.UPDATEINDEX . Documentos existentes não são comprimidos retroativamente.

Valor de retorno

  • Em caso de sucesso: OK

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.CREATEINDEX idx:product '{"mappings":{"_source":{"enabled":true},"properties":{"product_id":{"type":"keyword","ignore_above":128},"product_name":{"type":"text"},"product_title":{"type":"text","analyzer":"jieba"},"price":{"type":"double"}}}}'
OK

Consulte também: TFT.UPDATEINDEX, TFT.GETINDEX

TFT.UPDATEINDEX

Adiciona novos campos ao mapeamento de um índice ou modifica suas configurações.

Sintaxe

TFT.UPDATEINDEX index mappings [settings]

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

mappings

Sim

Novos campos properties a serem adicionados. Especifique apenas os campos que estão sendo adicionados — dynamic, _source e outras opções de mapeamento de nível superior não podem ser alteradas. Novos campos não devem entrar em conflito com campos existentes.

settings

Não

Configurações modificadas do índice. Apenas queries_cache, compress_doc e index (valores BM25 k1/b) podem ser modificados.

Para a sintaxe completa de mappings e settings, consulte TFT.CREATEINDEX.

Valor de retorno

  • Em caso de sucesso: OK

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.UPDATEINDEX idx:product '{"mappings":{"properties":{"product_group":{"type":"text","analyzer":"chinese"}}}}'
OK

Consulte também: TFT.CREATEINDEX, TFT.GETINDEX

TFT.GETINDEX

Recupera o mapeamento e as configurações de um índice.

Sintaxe

TFT.GETINDEX index

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

Valor de retorno

  • Em caso de sucesso: O conteúdo de mapeamento do índice formatado em JSON

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.GETINDEX idx:product
{"idx:product0310":{"mappings":{"_source":{"enabled":true,"excludes":[],"includes":["product_id"]},"dynamic":"false","properties":{"price":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"double"},"product_id":{"boost":1.0,"enabled":true,"ignore_above":128,"index":true,"similarity":"classic","type":"keyword"},"product_name":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"},"product_title":{"analyzer":"chinese","boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"}}}}}

Consulte também: TFT.CREATEINDEX, TFT.UPDATEINDEX

TFT.ADDDOC

Adiciona um único documento a um índice.

Sintaxe

TFT.ADDDOC index document [WITH_ID doc_id]

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

document

Sim

Documento JSON. Os valores dos campos devem corresponder aos tipos de dados definidos no mapeamento.

WITH_ID doc_id

Não

ID personalizado do documento (string). Se omitido, um ID é gerado automaticamente. Se o ID especificado já existir, o documento existente será sobrescrito.

Se _source estiver configurado com includes , apenas os campos listados em includes serão armazenados ao adicionar ou atualizar um documento.

Valor de retorno

  • Em caso de sucesso: Um objeto JSON contendo o ID do documento, por exemplo, {"_id":"00001"}

  • Em caso de falha: Uma mensagem de erro

Exemplos

Adicionar um documento com ID personalizado:

TFT.ADDDOC idx:product '{"product_id":"product test"}' WITH_ID 00001
{"_id":"00001"}

Adicionar um documento com um campo de array:

TFT.ADDDOC idx:product '{"product_id":["an","2","3df"]}' WITH_ID 00001

Consulte também: TFT.MADDDOC, TFT.UPDATEDOCFIELD, TFT.DELDOC

TFT.MADDDOC

Adiciona vários documentos a um índice em uma única operação atômica. Se qualquer documento tiver formato inválido, nenhum documento será adicionado.

Sintaxe

TFT.MADDDOC index document doc_id [document1 doc_id1] ...

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

document

Sim

Documento JSON. Os valores dos campos devem corresponder aos tipos de dados definidos no mapeamento.

doc_id

Sim

ID do documento (string).

Se _source estiver configurado com includes , apenas os campos listados em includes serão armazenados ao adicionar ou atualizar um documento.

Valor de retorno

  • Em caso de sucesso: OK

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.MADDDOC idx:product '{"product_id":"test1"}' 00011 '{"product_id":"test2"}' 00012
OK

Consulte também: TFT.ADDDOC, TFT.DELDOC

TFT.UPDATEDOCFIELD

Atualize campos específicos em um documento. Se o documento não existir, ele será criado (equivalente a TFT.ADDDOC). Se um campo não existir, ele será adicionado.

Sintaxe

TFT.UPDATEDOCFIELD index doc_id document

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

ID do documento a ser atualizado.

document

Sim

Objeto JSON contendo os campos a serem atualizados. Campos indexados devem corresponder aos tipos de dados definidos no mapeamento. Campos não indexados podem ser de qualquer tipo.

Se _source estiver configurado com includes , apenas os campos listados em includes serão armazenados ao adicionar ou atualizar um documento.

Valor de retorno

  • Em caso de sucesso: OK

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.UPDATEDOCFIELD idx:product 00011 '{"product_id":"test8","product_group":"BOOK"}'
OK

Consulte também: TFT.ADDDOC, TFT.DELDOCFIELD

TFT.DELDOCFIELD

Exclua um ou mais campos de um documento. Se o campo for indexado, sua entrada no índice também será removida.

Sintaxe

TFT.DELDOCFIELD index doc_id field [field1 field2 ...]

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

ID do documento.

field

Sim

Um ou mais nomes de campos a excluir.

A operação falha se o campo especificado não existir no documento (por exemplo, um campo filtrado por _source ).

Valor de retorno

  • Em caso de sucesso: O número de campos excluídos (inteiro)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.DELDOCFIELD idx:product 00011 product_group
(integer) 1

Consulte também: TFT.UPDATEDOCFIELD

TFT.INCRLONGDOCFIELD

Incrementa um campo inteiro em um documento. O campo deve ser do tipo LONG ou INTEGER. O tipo de dado ARRAY não é suportado.

Sintaxe

TFT.INCRLONGDOCFIELD index doc_id field increment

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

ID do documento.

field

Sim

Campo a ser incrementado. Deve ser do tipo LONG ou INTEGER.

increment

Sim

Valor do incremento. Pode ser um inteiro positivo ou negativo.

Se o documento não existir, ele será criado automaticamente com o campo inicializado em 0 antes de aplicar o incremento. A operação falha se o campo não existir no documento (por exemplo, um campo filtrado por _source ).

Valor de retorno

  • Em caso de sucesso: O valor atualizado do campo (inteiro)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.INCRLONGDOCFIELD idx:product 00011 stock 100
(integer)100

Consulte também: TFT.INCRFLOATDOCFIELD, TFT.UPDATEDOCFIELD

TFT.INCRFLOATDOCFIELD

Incrementa um campo de ponto flutuante em um documento. O campo deve ser do tipo DOUBLE. O tipo de dado ARRAY não é suportado.

Sintaxe

TFT.INCRFLOATDOCFIELD index doc_id field increment

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

ID do documento.

field

Sim

Campo a ser incrementado. Deve ser do tipo DOUBLE.

increment

Sim

Valor do incremento. Pode ser um número de ponto flutuante positivo ou negativo.

Se o documento não existir, ele será criado automaticamente com o campo inicializado em 0 antes de aplicar o incremento. A operação falha se o campo não existir no documento (por exemplo, um campo filtrado por _source ).

Valor de retorno

  • Em caso de sucesso: O valor atualizado do campo (string)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.INCRFLOATDOCFIELD idx:product 00011 stock 299.6
"299.6"

Consulte também: TFT.INCRLONGDOCFIELD, TFT.UPDATEDOCFIELD

TFT.GETDOC

Recupera um documento pelo seu ID.

Sintaxe

TFT.GETDOC index doc_id

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

ID do documento.

Valor de retorno

  • Em caso de sucesso: Um objeto JSON com o ID e o conteúdo do documento

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.GETDOC idx:product 00011
{"_id":"00011","_source":{"product_id":"test8"}}

Consulte também: TFT.EXISTS, TFT.SEARCH

TFT.EXISTS

Verifica se um documento existe em um índice.

Sintaxe

TFT.EXISTS index doc_id

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

ID do documento.

Valor de retorno

  • 1 se o documento existir

  • 0 se o índice ou documento não existir

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.EXISTS idx:product 00011
(integer) 1

Consulte também: TFT.GETDOC, TFT.DOCNUM

TFT.DOCNUM

Obtém o número de documentos em um índice.

Sintaxe

TFT.DOCNUM index

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

Valor de retorno

  • Em caso de sucesso: A contagem de documentos (inteiro)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.DOCNUM idx:product
(integer) 3

Consulte também: TFT.EXISTS, TFT.SCANDOCID

TFT.SCANDOCID

Varre IDs de documentos em um índice usando um cursor, semelhante ao comando SCAN do Redis.

Sintaxe

TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

cursor

Sim

Posição do cursor. Use 0 para iniciar uma nova varredura.

MATCH \value\**

Não

Padrão estilo glob para filtrar IDs de documentos. Exemplo: MATCH *redis*.

COUNT count

Não

Número máximo de itens a retornar por varredura. Padrão: 100.

Valor de retorno

Um array de dois elementos:

  1. Cursor para a próxima iteração. 0 indica que a varredura foi concluída.

  2. Array de IDs de documentos.

Exemplo

TFT.SCANDOCID idx:product 0 COUNT 3
1) "0"
2) 1) "00001"
   2) "00011"
   3) "00012"

Consulte também: TFT.DOCNUM, TFT.GETDOC

TFT.DELDOC

Exclua um ou mais documentos de um índice pelo ID do documento.

Sintaxe

TFT.DELDOC index doc_id [doc_id] ...

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

doc_id

Sim

Um ou mais IDs de documentos a excluir.

Valor de retorno

  • Em caso de sucesso: O número de documentos realmente excluídos (string). IDs inexistentes são ignorados.

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.DELDOC idx:product 00011 00014
"1"    # Document 00014 does not exist, so only document 00011 is deleted.

Consulte também: TFT.DELALL, TFT.ADDDOC

TFT.DELALL

Exclua todos os documentos de um índice, mantendo o índice e seu mapeamento.

Sintaxe

TFT.DELALL index

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

Valor de retorno

  • Em caso de sucesso: OK

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.DELALL idx:product
OK

Consulte também: TFT.DELDOC, DEL

TFT.ANALYZER

Testa como um analisador tokeniza um determinado texto.

Sintaxe

TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]

Parâmetros

Parâmetro

Obrigatório

Descrição

analyzer_name

Sim

Nome de um analisador integrado ou personalizado.

text

Sim

Texto a ser tokenizado. Deve estar codificado em UTF-8.

INDEX index_name

Condicional

Índice que contém a definição do analisador. Obrigatório ao usar um analisador personalizado ou um analisador integrado com stop words ou dicionários modificados.

SHOW_TIME

Não

Inclui a duração da tokenização na saída, em microssegundos. A primeira execução com um dicionário grande (por exemplo, Jieba, IK) pode levar vários segundos devido ao carregamento do dicionário.

Valor de retorno

  • Em caso de sucesso: Um objeto JSON contendo detalhes dos tokens

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.ANALYZER standard "Tair is a nosql database"
{
    "tokens": [
        {"token": "Tair", "start_offset": 0, "end_offset": 4, "position": 0},
        {"token": "nosql", "start_offset": 10, "end_offset": 15, "position": 3},
        {"token": "database", "start_offset": 16, "end_offset": 24, "position": 4}
    ]
}

DEL (Redis nativo)

Use o comando DEL nativo do Redis para excluir uma ou mais chaves (índices) do TairSearch.

DEL key [key ...]

Para mais detalhes, consulte a referência do comando DEL.

TFT.SEARCH

Busca documentos em um índice usando a Query DSL.

Sintaxe

TFT.SEARCH index query

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

query

Sim

Instrução Query DSL em JSON. Consulte as seções abaixo para a sintaxe completa.

A sintaxe da consulta é semelhante à Query DSL do Elasticsearch.

Valor de retorno

Em caso de sucesso, um objeto JSON contendo os resultados da busca:

{
    "hits": {
        "hits": [
            {"_id": "...", "_index": "...", "_score": 1.0, "_source": {...}}
        ],
        "max_score": 1.0,
        "total": {
            "relation": "eq",
            "value": 3
        }
    }
}

O campo total.relation indica como a contagem se relaciona com total.value:

  • "eq" -- A contagem é exata.

  • "gte" -- A contagem é pelo menos este valor (quando track_total_hits é false).

Exemplo

TFT.SEARCH idx:product '{"sort":[{"price":{"order":"desc"}}]}'
{"hits":{"hits":[{"_id":"fruits_3","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_3","product_name":"orange","price":30.2,"stock":3000}},{"_id":"fruits_2","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_2","product_name":"banana","price":24.0,"stock":2000}},{"_id":"fruits_1","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_1","product_name":"apple","price":19.5,"stock":1000}}],"max_score":1.0,"total":{"relation":"eq","value":3}}}

Consulte também: TFT.MSEARCH, TFT.EXPLAINCOST, TFT.EXPLAINSCORE

Tipos de consulta

O campo query na Query DSL suporta os seguintes tipos de consulta.

Ordenação

Use o campo sort para controlar a ordem dos resultados. O tipo de dado ARRAY não é suportado para ordenação.

Valor

Descrição

"_score"

Ordena por pontuação de relevância em ordem decrescente.

"_doc"

Ordena por ID do documento em ordem crescente.

field_name

Ordena por um campo específico em ordem crescente. O campo deve ser indexado (index: true) ou ter verificação de tipo (enabled: true) e ser do tipo keyword, long, integer ou double.

Para ordenação por múltiplos campos, use um array. Controle a direção da ordenação com order ("desc" ou "asc"):

{"sort": [{"price": {"order": "desc"}}, {"_doc": {"order": "desc"}}]}

Filtragem de source

Use o campo _source para controlar quais campos do documento aparecem nos resultados:

{"_source": {"includes": ["f0"]}}

Suporta tanto includes quanto excludes com padrões curinga.

Paginação

Parâmetro

Tipo

Descrição

Padrão

from

INTEGER

Deslocamento baseado em zero do primeiro resultado a retornar.

0

size

INTEGER

Número máximo de resultados a retornar. Valores válidos: 0 a 10000. Um valor de 0 retorna apenas a contagem total sem documentos.

10

Usar from e size juntos fornece paginação. O desempenho da consulta diminui à medida que from aumenta.

track_total_hits

Controla se deve contar todos os documentos correspondentes para consultas term, terms ou match (consultas compostas também são suportadas, mas a correspondência difusa dentro de match é desativada).

Valor

Comportamento

false

Retorna apenas os 100 principais documentos ordenados por pontuação.

true

Conta todos os documentos correspondentes.

Aviso

Definir track_total_hits como true com um grande número de documentos correspondentes pode causar lentidão nas consultas. Use com cautela.

TFT.MSEARCH

Busca em múltiplos índices que compartilham mapeamentos e configurações idênticos, agrega e retorna os resultados combinados.

Sintaxe

TFT.MSEARCH index_count index [index1] ... query

Parâmetros

Parâmetro

Obrigatório

Descrição

index_count

Sim

Número de índices a pesquisar. Valores válidos: 1 a 100.

index

Sim

Um ou mais nomes de índices. Todos os índices devem ter mappings e settings idênticos. Um erro é retornado se os mapeamentos diferirem ou se um índice não existir.

query

Sim

Instrução Query DSL em JSON. Suporta query, sort, _source, aggs, track_total_hits, size, reply_with_keys_cursor e keys_cursor.

TFT.MSEARCH não suporta o parâmetro from . Use paginação baseada em cursor (veja abaixo).

Paginação baseada em cursor

Use size, reply_with_keys_cursor e keys_cursor juntos para paginação:

Parâmetro

Tipo

Descrição

Padrão

size

INTEGER

Número de resultados a retornar por página.

10

reply_with_keys_cursor

BOOLEAN

Incluir posições do cursor na resposta.

false

keys_cursor

OBJECT

Posições do cursor da consulta anterior. Use 0 (ou omita) para a primeira consulta.

0

Como funciona:

  1. Primeira consulta: Defina reply_with_keys_cursor como true e omita keys_cursor (ou defina como 0). O Tair recupera size documentos de cada índice, depois reúne, pontua, ordena e agrega os resultados combinados, retornando os principais size documentos. A resposta inclui posições keys_cursor para cada índice.

  2. Próxima consulta: Passe o keys_cursor retornado da resposta anterior. O Tair continua a recuperação a partir das posições do cursor em cada índice.

Comportamento de agregação

TFT.MSEARCH agrega conjuntos de resultados filhos de cada índice em vez de agregar o conjunto de dados combinado:

  • Taxa e ordenação: Pontua e ordena conjuntos de resultados filhos.

  • sum, max, min, avg, value_count: Agrega através dos conjuntos de resultados filhos.

  • sum_of_squares, variance, std_deviation: Calcula médias através dos conjuntos de resultados filhos.

  • Agregação Terms e agregação Filter: Agrega através dos conjuntos de resultados filhos separadamente.

Valor de retorno

Em caso de sucesso, um objeto JSON semelhante à saída de TFT.SEARCH, mais um campo aux_info:

{
    "aux_info": {
        "index_crc64": 15096806844241479487,
        "keys_cursor": {"key0": 2, "key1": 5, "key2": 3},
        "field_type": {"f0": "long"}
    }
}

Campo

Descrição

index_crc64

Hash CRC-64 dos mapeamentos e configurações. Pode ser ignorado para requisições de negócios.

keys_cursor

Posições do cursor para a próxima consulta paginada. Incluído apenas quando reply_with_keys_cursor é true.

field_type

Tipos de dados dos campos ordenados. Incluído apenas ao ordenar por um campo de índice.

Exemplo

Configure três índices com o mesmo mapeamento:

TFT.CREATEINDEX key0 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key1 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key2 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.ADDDOC key0 '{"f0":120}'
TFT.ADDDOC key0 '{"f0":130}'
TFT.ADDDOC key1 '{"f0":140}'
TFT.ADDDOC key1 '{"f0":150}'
TFT.ADDDOC key2 '{"f0":160}'
TFT.ADDDOC key2 '{"f0":170}'

Primeira página:

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true}'
{"hits":{"hits":[{"_id":"16625439765504840","_index":"key2","_score":1.0,"_source":{"f0":170}},{"_id":"16625439741096630","_index":"key2","_score":1.0,"_source":{"f0":160}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":0,"key2":2}}}

Segunda página (passe o keys_cursor da resposta anterior):

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true,"keys_cursor":{"key0":0,"key1":0,"key2":2}}'
{"hits":{"hits":[{"_id":"16625439652681160","_index":"key1","_score":1.0,"_source":{"f0":150}},{"_id":"16625439624704580","_index":"key1","_score":1.0,"_source":{"f0":140}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":2,"key2":2}}}

Consulte também: TFT.SEARCH

TFT.EXPLAINCOST

Recupera o detalhamento do tempo de execução de uma consulta.

Sintaxe

TFT.EXPLAINCOST index query

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

query

Sim

Instrução Query DSL (mesma sintaxe de TFT.SEARCH).

Valor de retorno

Um objeto JSON com as seguintes seções:

Seção

Descrição

QUERY_COST

Tempo de execução da consulta em microssegundos (time_cost_us), além da visualização da consulta (query) e contagem de documentos (doc_num). Para consultas bool, inclui o tempo por etapa (steps).

AGGS_COST

Tempo de agregação em microssegundos. Omitido se nenhuma agregação for especificada.

COLLECTOR_COST

Tempo para coleta e ordenação de resultados em microssegundos, além do tipo de coletor: ScoreCollector (baseado em pontuação) ou CustomSortCollector (baseado em campo).

Exemplo

TFT.EXPLAINCOST idx:product '{"sort":[{"price":{"order":"desc"}}]}'
{
    "QUERY_COST": {
        "query": "MATCHALL_QUERY",
        "doc_num": 1,
        "time_cost_us": 2
    },
    "COLLECTOR_COST": {
        "collector_type": "CustomSortCollector",
        "time_cost_us": 20
    }
}

Consulte também: TFT.SEARCH, TFT.EXPLAINSCORE

TFT.EXPLAINSCORE

Recupera detalhamentos completos de pontuação para resultados de busca, mostrando como as pontuações dos documentos são calculadas.

Disponível apenas para instâncias baseadas em DRAM compatíveis com Redis 6.0 ou posterior.

Sintaxe

TFT.EXPLAINSCORE index query [doc_id] ...

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

query

Sim

Instrução Query DSL (mesma sintaxe de TFT.SEARCH).

doc_id

Não

Um ou mais IDs de documentos. Quando especificado, apenas esses documentos são incluídos na saída.

Valor de retorno

O mesmo conjunto de resultados de TFT.SEARCH, mais um objeto _explanation para cada documento contendo:

Campo

Descrição

score

Pontuação do documento.

description

Fórmula usada para cálculo da pontuação.

field

Campo do documento correspondente aos termos da consulta.

term

Termo da consulta encontrado no documento.

query_boost

Peso de pontuação aplicado a esta cláusula de consulta.

details

Metadados e o processo de pontuação passo a passo.

Exemplo

TFT.EXPLAINSCORE today_shares '{"query":{"wildcard":{"shares_name":{"value":"*BY"}}}}'
{
    "hits": {
        "hits": [
            {
                "_id": "17036492095306830",
                "_index": "today_shares",
                "_score": 1.0,
                "_source": {
                    "shares_name": "YBY",
                    "logictime": 14300410,
                    "purchase_type": 1,
                    "purchase_price": 11.1,
                    "purchase_count": 100,
                    "investor": "Mila"
                },
                "_explanation": {
                    "score": 1.0,
                    "description": "score, computed as query_boost",
                    "field": "shares_name",
                    "term": "*BY",
                    "query_boost": 1.0
                }
            }
        ],
        "max_score": 1.0,
        "total": {"relation": "eq", "value": 1}
    }
}

Consulte também: TFT.SEARCH, TFT.EXPLAINCOST

Comandos de autocompletar

TFT.ADDSUG

Adiciona uma ou mais entradas de texto de autocompletar com pesos associados.

Sintaxe

TFT.ADDSUG index text weight [text weight] ...

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

text

Sim

Entrada de texto de autocompletar.

weight

Sim

Peso de pontuação (inteiro positivo). Pesos maiores classificam mais alto nos resultados.

Valor de retorno

  • Em caso de sucesso: O número de entradas de texto adicionadas (inteiro)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.ADDSUG idx:redis 'redis is a memory database' 3 'redis cluster' 10
(integer) 2

Consulte também: TFT.GETSUG, TFT.DELSUG, TFT.SUGNUM

TFT.DELSUG

Exclua uma ou mais entradas de texto de autocompletar de um índice.

Sintaxe

TFT.DELSUG index text [text] ...

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

text

Sim

Entrada de texto exata a excluir. Deve ser uma correspondência completa e exata.

Valor de retorno

  • Em caso de sucesso: O número de entradas de texto excluídas (inteiro)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.DELSUG idx:redis 'redis is a memory database' 'redis cluster'
(integer) 2

Consulte também: TFT.ADDSUG, TFT.SUGNUM

TFT.SUGNUM

Obtém o número de entradas de texto de autocompletar em um índice.

Sintaxe

TFT.SUGNUM index

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

Valor de retorno

  • Em caso de sucesso: A contagem de entradas (inteiro)

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.SUGNUM idx:redis
(integer) 3

Consulte também: TFT.ADDSUG, TFT.GETSUG

TFT.GETSUG

Recupera sugestões de autocompletar correspondentes a um prefixo. Os resultados são retornados em ordem decrescente de peso.

Sintaxe

TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

prefix

Sim

Prefixo a corresponder.

MAX_COUNT count

Não

Número máximo de entradas a retornar. Valores válidos: 0 a 255.

FUZZY

Não

Ativa correspondência difusa.

Valor de retorno

  • Em caso de sucesso: Uma lista de entradas de texto de autocompletar correspondentes

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.GETSUG idx:redis res MAX_COUNT 2 FUZZY
1) "redis cluster"
2) "redis lock"

Consulte também: TFT.ADDSUG, TFT.GETALLSUGS

TFT.GETALLSUGS

Recupera todas as entradas de texto de autocompletar em um índice.

Sintaxe

TFT.GETALLSUGS index

Parâmetros

Parâmetro

Obrigatório

Descrição

index

Sim

Nome do índice.

Valor de retorno

  • Em caso de sucesso: Uma lista de todas as entradas de texto de autocompletar

  • Em caso de falha: Uma mensagem de erro

Exemplo

TFT.GETALLSUGS idx:redis
1) "redis cluster"
2) "redis lock"
3) "redis is a memory database"

Consulte também: TFT.GETSUG, TFT.ADDSUG

Agregações

Adicione uma cláusula aggs (ou aggregations) a uma consulta TFT.SEARCH para realizar agregações no conjunto de resultados.

Uso básico

Especifique um nome de agregação personalizado, um tipo de agregação e um field para agregar:

TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'

A resposta inclui tanto os resultados da busca de query quanto os resultados da agregação de aggs:

{"hits":{"hits":[{"_id":"16581351808123930","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}},{"_id":"16581351809626430","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}}],"max_score":1.0,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}
Adicione "size": 0 à consulta para retornar apenas resultados de agregação sem documentos.

Agregação de métricas

Agregações de métricas realizam cálculos numéricos em campos numéricos (integer, double, etc.) e não suportam subagregações aninhadas.

Métrica

Descrição

Tipos de campo suportados

sum

Soma dos valores do campo

Numérico

max

Valor máximo

Numérico

min

Valor mínimo

Numérico

avg

Valor médio

Numérico

sum_of_squares

Soma dos valores ao quadrado

Numérico

variance

Variância estatística

Numérico

std_deviation

Desvio padrão

Numérico

value_count

Contagem de valores (sem deduplicação)

Numérico, keyword

extended_stats

Todas as métricas acima em uma única resposta

Numérico

Apenas value_count suporta campos keyword . Todas as outras métricas exigem campos numéricos.

Saída: Um valor DOUBLE calculado a partir do campo especificado.

Agregação Terms

Conta valores deduplicados em um campo keyword. Suporta subagregações aninhadas.

Parâmetro

Descrição

Padrão

field

Campo de agregação. Apenas campos keyword são suportados.

Obrigatório

size

Número de buckets a retornar. Valores válidos: 1 a 65535.

10

order

Ordem de classificação. {"_count": "desc"} ordena por contagem de documentos (padrão). {"_key": "asc"} ordena alfabeticamente pelo valor do campo.

{"_count": "desc"}

min_doc_count

Contagem mínima de documentos para que um bucket seja incluído nos resultados.

1

include

Padrão regex ou valor exato que as chaves do bucket devem corresponder. Para campos string, há suporte para correspondência regex. Para campos array, é necessária correspondência exata.

--

exclude

Padrão regex ou valor exato que as chaves do bucket não devem corresponder. Se tanto include quanto exclude forem especificados, include é verificado primeiro, depois exclude.

--

Saída: Um objeto JSON com buckets. Cada bucket contém key (o valor do campo) e doc_count (a contagem de documentos):

{
    "aggregations": {
        "Per_Investor_Freq": {
            "buckets": [
                {"doc_count": 2, "key": "Jay"},
                {"doc_count": 1, "key": "Mila"}
            ]
        }
    }
}

Exemplo:

{"aggs": {"Per_Investor_Freq": {"terms": {"field": "investor"}}}}

Agregação Filter

Filtra resultados de consulta com uma instrução de consulta e conta documentos correspondentes. Suporta subagregações aninhadas.

Saída: O número de documentos (doc_count) correspondentes à condição do filtro.

Exemplos de agregação

Os exemplos a seguir usam um conjunto de dados de negociação de ações.

Etapa 1: Criar o índice

TFT.CREATEINDEX today_shares '{"mappings":{"properties":{"shares_name":{"type":"keyword"},"logictime":{"type":"long"},"purchase_type":{"type":"integer"},"purchase_price":{"type":"double"},"purchase_count":{"type":"long"},"investor":{"type":"keyword"}}}}'

Etapa 2: Adicionar documentos

TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}'
TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}'
TFT.ADDDOC today_shares '{"shares_name":"YBY","logictime":14300410,"purchase_type":1,"purchase_price":11.1,"purchase_count":100,"investor":"Mila"}'

Etapa 3: Execute consultas

sum -- Valor total de compra para um investidor

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}

max -- Maior preço de compra para um investidor

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}

avg -- Preço médio de compra para um investidor

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}

std_deviation -- Desvio padrão dos preços de compra

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}

extended_stats -- Todas as estatísticas de uma vez

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Extended_Stats":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}

terms -- Investidores com pelo menos duas transações

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"investor","min_doc_count":2,"order":{"_key":"desc"}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}

Agregação Terms aninhada -- Contagem de transações por ação com preço médio

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"shares_name","include":"[A-Z]+","exclude":["XAX"]},"aggs":{"Price_Avg":{"avg":{"field":"purchase_price"}}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"YBY","doc_count":1,"Price_Avg":{"value":11.1}}]}}}

Agregação Filter aninhada -- Filtrar por investidor com estatísticas estendidas

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Jay_BuyIn_Filter":{"filter":{"term":{"investor":"Jay"}},"aggs":{"Jay_BuyIn_Quatation":{"extended_stats":{"field":"purchase_price"}}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Jay_BuyIn_Filter":{"doc_count":2,"Jay_BuyIn_Quatation":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}}