Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):TairSearch commands

Última actualización: Sep 03, 2026

TairSearch es un módulo de búsqueda de texto completo integrado en Tair (compatible con Redis OSS). Utiliza una sintaxis de consulta similar a la de Elasticsearch y ofrece un rendimiento de escritura y búsqueda en el orden de milisegundos.

Descripción general

TairSearch proporciona las siguientes capacidades:

  • Baja latencia y alto rendimiento: Escritura y búsqueda de texto completo en milisegundos, impulsadas por el motor en memoria de Tair. Para más detalles, consulte TairSearch performance whitepaper.

  • Actualizaciones incrementales y parciales: Permite agregar, actualizar, eliminar e incrementar automáticamente campos individuales de documentos sin necesidad de reescribirlos por completo.

  • Sintaxis de consulta similar a Elasticsearch: Query DSL basado en JSON compatible con bool, match, term, paginación y ordenamiento; resulta familiar para desarrolladores con experiencia en Elasticsearch.

  • Agregación: Agregaciones de terms, métricas y filter para realizar análisis sobre los resultados de búsqueda. Consulte Aggregations.

  • Autocompletado: Coincidencia difusa basada en prefijos para experiencias de búsqueda mientras se escribe.

  • Analizadores integrados y personalizados: Analizadores integrados para inglés (standard, stop), chino (jieba, IK) y otros idiomas. También se admiten analizadores personalizados con diccionarios y palabras vacías definidos por el usuario. Para más detalles, consulte Search analyzers.

  • Consulta de índice fragmentado: Búsqueda en varios índices fragmentados mediante TFT.MSEARCH con obtención de resultados agregados.

  • Compresión de documentos: Compresión de documentos almacenados para reducir el uso de memoria. Deshabilitada de forma predeterminada.

  • Caché de consultas: Almacenamiento en caché de resultados de consultas recientes para mejorar el rendimiento en datos de acceso frecuente.

Requisitos previos

La instancia debe ser una Tair memory-optimized instance (basada en DRAM) que ejecute una de las siguientes versiones:

Engine version

Minimum minor version

Compatible con Redis 5.0

1.7.27 o posterior

Compatible con Redis 6.0

6.2.4.1 o posterior

Compatible con Redis 7.0

Todas las versiones menores

Actualice la instancia a la versión menor más reciente para obtener la mayor cantidad de funciones y la máxima estabilidad. Para obtener instrucciones, consulte Upgrade minor and proxy versions . En instancias de clúster o con división de lectura/escritura, actualice también los nodos proxy a la versión menor más reciente para garantizar que todos los comandos funcionen correctamente.

Notas de la versión

Instancias basadas en DRAM compatibles con Redis 5.0

Date

Version

Changes

2022-03-11

V1.7.27

Lanzamiento de TairSearch

2022-05-24

V1.8.5

Función de agregación

2022-09-06

V5.0.15

Comando TFT.MSEARCH

2023-01-13

V5.0.25

Analizadores

2023-03-15

V5.0.28

Caché de consultas, compresión de documentos, comando TFT.ANALYZER

2023-06-12

V5.0.35

Tipo de dato ARRAY, algoritmo de similitud Okapi BM25

Instancias basadas en DRAM compatibles con Redis 6.0

Date

Version

Changes

2023-02-07

V6.2.4.1

TairSearch (todas las funciones de V5.0.25)

2023-03-14

V6.2.5.0

Caché de consultas, compresión de documentos, TFT.ANALYZER (todas las funciones de V5.0.28)

2023-06-12

V6.2.7.3

Tipo de dato ARRAY, Okapi BM25 (todas las funciones de V5.0.35)

2023-12-21

V23.12.1.2

Comando TFT.EXPLAINSCORE

Instancias basadas en DRAM compatibles con Redis 7.0

Date

Version

Changes

2024-07-22

V24.7.0.0

Compatibilidad con TairSearch

Mejores prácticas

Notas de uso

  • Los datos de TairSearch se almacenan en la instancia de Tair y consumen memoria de dicha instancia.

  • Para reducir el uso de memoria:

    • Establezca index en true solo para los campos que deban ser buscables. Establezca index en false para los demás campos.

    • Utilice _source con patrones includes/excludes para almacenar únicamente los campos del documento que necesite.

    • Elija un analizador adecuado para evitar tokenizaciones innecesarias y un mayor consumo de memoria.

    • Habilite la compresión de documentos cuando estos sean grandes.

  • Mantenga el número de documentos por índice dentro de los 5 millones. Esto evita el desequilibrio de datos en instancias de clúster, equilibra las solicitudes de lectura y escritura, y reduce la presencia de claves grandes y claves de acceso frecuente. Divida conjuntos de datos grandes en varios índices y utilice TFT.MSEARCH para consultarlos de forma conjunta.

Convenciones de sintaxis

Convention

Meaning

MAYÚSCULAS

Palabra clave del comando

cursiva

Variable

[opciones]

Parámetro opcional. Los parámetros sin corchetes son obligatorios.

`A\

B`

Parámetros mutuamente excluyentes. Especifique solo uno.

...

El parámetro anterior puede repetirse.

Comandos de búsqueda de texto completo

TFT.CREATEINDEX

Crea un índice con una definición de mapeo. La sintaxis de mapeo es similar al mapeo explícito de Elasticsearch. Debe crearse un índice antes de poder agregar documentos.

Sintaxis

TFT.CREATEINDEX index mappings [settings]
Para evitar claves grandes, divida los índices extensos en índices más pequeños con mappings y settings idénticos, y consúltelos de forma conjunta mediante TFT.MSEARCH .

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice que se va a crear.

mappings

Sí

Definición de mapeo en formato JSON. Consulte Opciones de mapeo.

settings

No

Configuración del índice en formato JSON. Consulte Configuración del índice.

Opciones de mapeo

El objeto mappings admite los siguientes campos de nivel superior:

dynamic

Modo de mapeo. Valores válidos:

  • "strict" -- Solo se pueden escribir datos en campos definidos en properties. La escritura en campos no definidos falla.

  • No especificado (predeterminado) -- Modo no estricto. El sistema no comprueba si los campos escritos están definidos en properties.

enabled

Controla la validación de tipos para campos no indexados (index establecido en false). Valores válidos: true (predeterminado) y false. Cuando es true, la escritura falla si el tipo del campo no coincide con el definido en properties. Los campos indexados siempre se validan independientemente de esta configuración.

_source

Controla si se almacena el documento original. Esta configuración no afecta la creación del índice.

  • enabled -- true (predeterminado) almacena el documento original. false no lo almacena.

  • includes -- Matriz de patrones de nombres de campo que se deben incluir. Se admiten comodines.

  • excludes -- Matriz de patrones de nombres de campo que se deben excluir. Se admiten comodines. Si un campo coincide tanto con includes como con excludes, excludes tiene prioridad (el campo no se almacena).

Ejemplos:

"_source": {"enabled": true}

Este es el valor predeterminado: almacena todos los campos. Equivale a "_source": {"enabled": true, "excludes": [], "includes": []}.

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

Almacena únicamente los campos id y name.

properties

Conjunto de definiciones de campos. Cada campo admite los siguientes atributos:

Attribute

Description

Default

type

Tipo de dato. Consulte Tipos de campo.

Obligatorio

index

Indica si este campo está indexado (es buscable). true o false.

true

boost

Peso del campo para la puntuación. Número de punto flotante positivo.

1

similarity

Algoritmo de similitud: "classic" (TF-IDF) o "BM25" (Okapi BM25).

"classic"

Tipos de campo

Type

Description

Type-specific options

keyword

Cadena que no se tokeniza. Adecuada para consultas de coincidencia exacta.

ignore_above: Longitud máxima de la cadena. Predeterminado: 128.

text

Cadena que se tokeniza mediante un analizador antes de la indexación.

analyzer, search_analyzer. Consulte Opciones de analizador de texto.

long

Entero de 64 bits. Adecuado para marcas de tiempo (época Unix).

--

integer

Entero de 32 bits.

--

double

Número de punto flotante de 64 bits. No se admiten NaN, Inf ni -Inf.

--

Compatibilidad con ARRAY: Todos los tipos de campo admiten variantes de matriz. Agregue [] al nombre del tipo. Por ejemplo, keyword[] declara una matriz de palabras clave.

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

Opciones de analizador de texto

Option

Description

Default

analyzer

Analizador utilizado para la indexación. Consulte Built-in analyzers. También se pueden especificar analizadores personalizados, configurados mediante la sección analysis en settings.

"standard"

search_analyzer

Analizador utilizado durante la búsqueda. Mismos valores válidos que analyzer.

Igual que analyzer

Analizadores integrados

standard (predeterminado), jieba (recomendado para chino, funciona mejor que chinese), stop, IK, pattern, whitespace, simple, keyword, chinese, french, dutch, russian.

Para más detalles, consulte Built-in analyzers.

Configuración del índice

El objeto opcional settings admite los siguientes campos:

analysis

Define analizadores personalizados. Para más detalles, consulte Custom analyzers.

index

Configura algoritmos de similitud personalizados. Utilícelo para personalizar los parámetros de Okapi BM25:

Parameter

Description

Default

Valid values

k1

Controla cuánto afecta la frecuencia del término a la puntuación. Valores más altos aumentan el efecto.

1.2

Mayor que 0

b

Controla cuánto afecta la longitud del documento a la puntuación. Valores más altos aumentan el efecto.

0.75

De 0 a 1

Ejemplo:

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 la caché de resultados de consulta. De forma predeterminada, la caché almacena hasta 10,000 resultados sin límite de memoria. Cuando está llena, los resultados se desalojan mediante el algoritmo Least Recently Used (LRU).

Parameter

Type

Description

Default

size

STRING

Memoria máxima para todas las cachés de consultas. Admite unidades "bytes", "kb" y "mb". Ejemplos: "1000" (1,000 bytes), "10kb", "1mb".

Sin límite

ttl

INTEGER

Tiempo de vida (TTL) de los resultados en caché, en segundos.

10

Ejemplo:

"settings": {"queries_cache": {"size": "100mb", "ttl": 3}}
queries_cache es un parámetro a nivel de nodo. Configurar este parámetro en un índice afecta a todos los demás índices del mismo proceso. Utilice la misma configuración de queries_cache en todos los índices.
compress_doc

Configura la compresión transparente de documentos. Habilitar la compresión aumenta el consumo de CPU y la latencia de lectura/escritura. Habilite esta opción solo cuando el índice sea grande (kilobytes o más) y el costo de almacenamiento sea la principal preocupación.

Parameter

Type

Description

Default

size

STRING

Umbral de compresión. Los documentos se comprimen solo cuando alcanzan este tamaño. Admite unidades "bytes", "kb" y "mb".

"10kb"

enable

BOOLEAN

Indica si se habilita la compresión.

false

Ejemplo:

"settings": {"compress_doc": {"size": "1kb", "enable": true}}
La compresión se aplica únicamente a los documentos escritos o actualizados después de habilitar la configuración mediante TFT.UPDATEINDEX . Los documentos existentes no se comprimen retroactivamente.

Valor de retorno

  • En caso de éxito: OK

  • En caso de fallo: Un mensaje de error

Ejemplo

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 también: TFT.UPDATEINDEX, TFT.GETINDEX

TFT.UPDATEINDEX

Agrega nuevos campos al mapeo de un índice o modifica su configuración.

Sintaxis

TFT.UPDATEINDEX index mappings [settings]

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

mappings

Sí

Nuevos campos de properties por agregar. Especifique únicamente los campos que se van a agregar; dynamic, _source y otras opciones de mapeo de nivel superior no se pueden modificar. Los nuevos campos no deben entrar en conflicto con los existentes.

settings

No

Configuración modificada del índice. Solo se pueden modificar queries_cache, compress_doc e index (valores k1/b de BM25).

Para consultar la sintaxis completa de mappings y settings, consulte TFT.CREATEINDEX.

Valor de retorno

  • En caso de éxito: OK

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.CREATEINDEX, TFT.GETINDEX

TFT.GETINDEX

Recupera el mapeo y la configuración de un índice.

Sintaxis

TFT.GETINDEX index

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

Valor de retorno

  • En caso de éxito: Contenido de mapeo del índice en formato JSON

  • En caso de fallo: Un mensaje de error

Ejemplo

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 también: TFT.CREATEINDEX, TFT.UPDATEINDEX

TFT.ADDDOC

Agrega un solo documento a un índice.

Sintaxis

TFT.ADDDOC index document [WITH_ID doc_id]

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

document

Sí

Documento JSON. Los valores de los campos deben coincidir con los tipos de datos definidos en el mapeo.

WITH_ID doc_id

No

ID personalizado del documento (cadena). Si se omite, se genera un ID automáticamente. Si el ID especificado ya existe, se sobrescribe el documento existente.

Si _source está configurado con includes , solo se almacenan los campos listados en includes al agregar o actualizar un documento.

Valor de retorno

  • En caso de éxito: Un objeto JSON que contiene el ID del documento, por ejemplo, {"_id":"00001"}

  • En caso de fallo: Un mensaje de error

Ejemplos

Agregar un documento con un ID personalizado:

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

Agregar un documento con un campo de matriz:

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

Consulte también: TFT.MADDDOC, TFT.UPDATEDOCFIELD, TFT.DELDOC

TFT.MADDDOC

Agrega varios documentos a un índice en una sola operación atómica. Si algún documento tiene un formato no válido, no se agrega ninguno.

Sintaxis

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

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

document

Sí

Documento JSON. Los valores de los campos deben coincidir con los tipos de datos definidos en el mapeo.

doc_id

Sí

ID del documento (cadena).

Si _source está configurado con includes , solo se almacenan los campos listados en includes al agregar o actualizar un documento.

Valor de retorno

  • En caso de éxito: OK

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.ADDDOC, TFT.DELDOC

TFT.UPDATEDOCFIELD

Actualiza campos específicos en un documento. Si el documento no existe, se crea (equivale a TFT.ADDDOC). Si un campo no existe, se agrega.

Sintaxis

TFT.UPDATEDOCFIELD index doc_id document

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

doc_id

Sí

ID del documento que se va a actualizar.

document

Sí

Objeto JSON que contiene los campos por actualizar. Los campos indexados deben coincidir con los tipos de datos definidos en el mapeo. Los campos no indexados pueden ser de cualquier tipo.

Si _source está configurado con includes , solo se almacenan los campos listados en includes al agregar o actualizar un documento.

Valor de retorno

  • En caso de éxito: OK

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.ADDDOC, TFT.DELDOCFIELD

TFT.DELDOCFIELD

Elimina uno o más campos de un documento. Si el campo está indexado, también se quita su entrada en el índice.

Sintaxis

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

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

doc_id

Sí

ID del documento.

field

Sí

Uno o más nombres de campos por eliminar.

La operación falla si el campo especificado no existe en el documento (por ejemplo, un campo filtrado por _source ).

Valor de retorno

  • En caso de éxito: Número de campos eliminados (entero)

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.UPDATEDOCFIELD

TFT.INCRLONGDOCFIELD

Incrementa un campo entero en un documento. El campo debe ser de tipo LONG o INTEGER. No se admite el tipo de dato ARRAY.

Sintaxis

TFT.INCRLONGDOCFIELD index doc_id field increment

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

doc_id

Sí

ID del documento.

field

Sí

Campo por incrementar. Debe ser de tipo LONG o INTEGER.

increment

Sí

Valor de incremento. Puede ser un entero positivo o negativo.

Si el documento no existe, se crea automáticamente con el campo inicializado en 0 antes de aplicar el incremento. La operación falla si el campo no existe en el documento (por ejemplo, un campo filtrado por _source ).

Valor de retorno

  • En caso de éxito: Valor actualizado del campo (entero)

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.INCRFLOATDOCFIELD, TFT.UPDATEDOCFIELD

TFT.INCRFLOATDOCFIELD

Incrementa un campo de punto flotante en un documento. El campo debe ser de tipo DOUBLE. No se admite el tipo de dato ARRAY.

Sintaxis

TFT.INCRFLOATDOCFIELD index doc_id field increment

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

doc_id

Sí

ID del documento.

field

Sí

Campo por incrementar. Debe ser de tipo DOUBLE.

increment

Sí

Valor de incremento. Puede ser un número de punto flotante positivo o negativo.

Si el documento no existe, se crea automáticamente con el campo inicializado en 0 antes de aplicar el incremento. La operación falla si el campo no existe en el documento (por ejemplo, un campo filtrado por _source ).

Valor de retorno

  • En caso de éxito: Valor actualizado del campo (cadena)

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.INCRLONGDOCFIELD, TFT.UPDATEDOCFIELD

TFT.GETDOC

Recupera un documento por su ID.

Sintaxis

TFT.GETDOC index doc_id

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

doc_id

Sí

ID del documento.

Valor de retorno

  • En caso de éxito: Un objeto JSON con el ID y el contenido del documento

  • En caso de fallo: Un mensaje de error

Ejemplo

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

Consulte también: TFT.EXISTS, TFT.SEARCH

TFT.EXISTS

Comprueba si un documento existe en un índice.

Sintaxis

TFT.EXISTS index doc_id

Parámetros

Parameter

Required

Description

index

Sí

Nombre del índice.

doc_id

Sí

ID del documento.

Valor de retorno

  • 1 si el documento existe

  • 0 si el índice o el documento no existen

  • En caso de fallo: Un mensaje de error

Ejemplo

TFT.EXISTS idx:product 00011
(integer) 1

Consulte también: TFT.GETDOC, TFT.DOCNUM

TFT.DOCNUM

Obtiene la cantidad de documentos en un índice.

Sintaxis

TFT.DOCNUM index

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

Valor de retorno

  • En caso de éxito: el recuento de documentos (entero)

  • En caso de error: un mensaje de error

Ejemplo

TFT.DOCNUM idx:product
(integer) 3

Consulte también: TFT.EXISTS, TFT.SCANDOCID

TFT.SCANDOCID

Explora los ID de documentos en un índice mediante un cursor, de forma similar al comando SCAN de Redis.

Sintaxis

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

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

cursor

Sí

La posición del cursor. Use 0 para iniciar una nueva exploración.

MATCH \value\**

No

Un patrón de estilo glob para filtrar los ID de documentos. Ejemplo: MATCH *redis*.

COUNT count

No

El número máximo de elementos que se devuelven por exploración. Valor predeterminado: 100.

Valor de retorno

Un arreglo de dos elementos:

  1. El cursor para la siguiente iteración. 0 indica que la exploración finalizó.

  2. Un arreglo con los ID de documentos.

Ejemplo

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

Consulte también: TFT.DOCNUM, TFT.GETDOC

TFT.DELDOC

Elimina uno o más documentos de un índice según su ID de documento.

Sintaxis

TFT.DELDOC index doc_id [doc_id] ...

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

doc_id

Sí

Uno o más ID de documentos para eliminar.

Valor de retorno

  • En caso de éxito: la cantidad de documentos eliminados realmente (cadena). Los ID inexistentes se ignoran.

  • En caso de error: un mensaje de error

Ejemplo

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

Consulte también: TFT.DELALL, TFT.ADDDOC

TFT.DELALL

Elimina todos los documentos de un índice y conserva tanto el índice como su asignación.

Sintaxis

TFT.DELALL index

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

Valor de retorno

  • En caso de éxito: OK

  • En caso de error: un mensaje de error

Ejemplo

TFT.DELALL idx:product
OK

Consulte también: TFT.DELDOC, DEL

TFT.ANALYZER

Prueba cómo tokeniza un analizador un texto determinado.

Sintaxis

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

Parámetros

Parameter

Required

Description

analyzer_name

Sí

El nombre de un analizador integrado o personalizado.

text

Sí

El texto que se va a tokenizar. Debe tener codificación UTF-8.

INDEX index_name

Condicional

El índice que contiene la definición del analizador. Es obligatorio cuando se usa un analizador personalizado o un analizador integrado con palabras vacías o diccionarios modificados.

SHOW_TIME

No

Incluye la duración de la tokenización en la salida, expresada en microsegundos. La primera ejecución con un diccionario grande (por ejemplo, Jieba, IK) puede tardar varios segundos debido a la carga del diccionario.

Valor de retorno

  • En caso de éxito: un objeto JSON con los detalles de los tokens

  • En caso de error: un mensaje de error

Ejemplo

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 el comando DEL nativo de Redis para eliminar una o más claves de TairSearch (índices).

DEL key [key ...]

Para obtener más información, consulte la referencia del comando DEL.

TFT.SEARCH

Busca documentos en un índice mediante Query DSL.

Sintaxis

TFT.SEARCH index query

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

query

Sí

Una instrucción JSON de Query DSL. Consulte las secciones siguientes para ver la sintaxis completa.

La sintaxis de la consulta es similar a Elasticsearch Query DSL.

Valor de retorno

En caso de éxito, devuelve un objeto JSON con los resultados de la búsqueda:

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

El campo total.relation indica cómo se relaciona el recuento con total.value:

  • "eq" -- El recuento es exacto.

  • "gte" -- El recuento es como mínimo este valor (cuando track_total_hits es false).

Ejemplo

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 también: TFT.MSEARCH, TFT.EXPLAINCOST, TFT.EXPLAINSCORE

Tipos de consulta

El campo query en Query DSL admite los siguientes tipos de consulta.

Ordenamiento

Utilice el campo sort para controlar el orden de los resultados. El tipo de datos ARRAY no es compatible con el ordenamiento.

Value

Description

"_score"

Ordena por puntuación de relevancia en orden descendente.

"_doc"

Ordena por ID de documento en orden ascendente.

field_name

Ordena por un campo específico en orden ascendente. El campo debe estar indexado (index: true) o validado por tipo (enabled: true) y ser de tipo keyword, long, integer o double.

Para ordenar por varios campos, utilice un arreglo. Controle la dirección del ordenamiento con order ("desc" o "asc"):

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

Filtrado de origen

Utilice el campo _source para controlar qué campos del documento aparecen en los resultados:

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

Es compatible con includes y excludes mediante patrones de comodines.

Paginación

Parameter

Type

Description

Default

from

INTEGER

El desplazamiento basado en cero del primer resultado que se devolverá.

0

size

INTEGER

El número máximo de resultados que se devolverán. Valores válidos: de 0 a 10000. Un valor de 0 devuelve únicamente el recuento total, sin documentos.

10

El uso conjunto de from y size permite la paginación. El rendimiento de la consulta disminuye a medida que aumenta from .

track_total_hits

Controla si se cuentan todos los documentos coincidentes para consultas term, terms o match (también se admiten consultas compuestas, pero la coincidencia difusa dentro de match se deshabilita).

Value

Behavior

false

Devuelve únicamente los primeros 100 documentos ordenados por puntuación.

true

Cuenta todos los documentos coincidentes.

Aviso

Establecer track_total_hits en true cuando hay una gran cantidad de documentos coincidentes puede provocar consultas lentas. Utilícelo con precaución.

TFT.MSEARCH

Realiza búsquedas en varios índices que comparten asignaciones y configuraciones idénticas; luego agrega y devuelve los resultados combinados.

Sintaxis

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

Parámetros

Parameter

Required

Description

index_count

Sí

La cantidad de índices en los que se buscará. Valores válidos: de 1 a 100.

index

Sí

Uno o más nombres de índices. Todos los índices deben tener mappings y settings idénticos. Se devuelve un error si las asignaciones difieren o si algún índice no existe.

query

Sí

Una instrucción JSON de Query DSL. Admite query, sort, _source, aggs, track_total_hits, size, reply_with_keys_cursor y keys_cursor.

TFT.MSEARCH no admite el parámetro from . En su lugar, utilice la paginación basada en cursores (consulte a continuación).

Paginación basada en cursores

Utilice size, reply_with_keys_cursor y keys_cursor de forma conjunta para la paginación:

Parameter

Type

Description

Default

size

INTEGER

Cantidad de resultados que se devolverán por página.

10

reply_with_keys_cursor

BOOLEAN

Incluye las posiciones del cursor en la respuesta.

false

keys_cursor

OBJECT

Posiciones del cursor de la consulta anterior. Utilice 0 (u omítalo) para la primera consulta.

0

Funcionamiento:

  1. Primera consulta: Establezca reply_with_keys_cursor en true y omita keys_cursor (o establézcalo en 0). Tair recupera size documentos de cada índice; luego recopila, puntúa, ordena y agrega los resultados combinados, y devuelve los mejores size documentos. La respuesta incluye las posiciones de keys_cursor para cada índice.

  2. Siguiente consulta: Pase el valor de keys_cursor devuelto en la respuesta anterior. Tair continúa la recuperación desde las posiciones del cursor en cada índice.

Comportamiento de agregación

TFT.MSEARCH agrega conjuntos de resultados secundarios de cada índice en lugar de agregar el conjunto de datos combinado:

  • Rate and sort: Puntúa y ordena los conjuntos de resultados secundarios.

  • sum, max, min, avg, value_count: Realiza agregaciones en todos los conjuntos de resultados secundarios.

  • sum_of_squares, variance, std_deviation: Calcula promedios en todos los conjuntos de resultados secundarios.

  • Terms aggregation y filter aggregation: Realiza agregaciones por separado en todos los conjuntos de resultados secundarios.

Valor de retorno

En caso de éxito, devuelve un objeto JSON similar a la salida de TFT.SEARCH, además de un campo aux_info:

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

Field

Description

index_crc64

Hash CRC-64 de las asignaciones y configuraciones. Puede ignorarse en solicitudes de negocio.

keys_cursor

Posiciones del cursor para la siguiente consulta paginada. Se incluye únicamente cuando reply_with_keys_cursor es true.

field_type

Tipos de datos de los campos ordenados. Se incluye únicamente cuando se ordena por un campo del índice.

Ejemplo

Configure tres índices con la misma asignación:

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}'

Primera 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 (pase el valor de keys_cursor de la respuesta 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 también: TFT.SEARCH

TFT.EXPLAINCOST

Recupera el desglose del tiempo de ejecución de una consulta.

Sintaxis

TFT.EXPLAINCOST index query

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

query

Sí

Una instrucción de Query DSL (misma sintaxis que TFT.SEARCH).

Valor de retorno

Un objeto JSON con las siguientes secciones:

Section

Description

QUERY_COST

Tiempo de ejecución de la consulta en microsegundos (time_cost_us), además de la vista de la consulta (query) y el recuento de documentos (doc_num). Para consultas bool, incluye el tiempo por paso (steps).

AGGS_COST

Tiempo de agregación en microsegundos. Se omite si no se especifica ninguna agregación.

COLLECTOR_COST

Tiempo dedicado a recopilar y ordenar resultados, en microsegundos, además del tipo de colector: ScoreCollector (basado en puntuación) o CustomSortCollector (basado en campo).

Ejemplo

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 también: TFT.SEARCH, TFT.EXPLAINSCORE

TFT.EXPLAINSCORE

Recupera desgloses detallados de la puntuación de los resultados de búsqueda y muestra cómo se calculan las puntuaciones de los documentos.

Disponible únicamente para instancias basadas en DRAM compatibles con Redis 6.0 o posterior.

Sintaxis

TFT.EXPLAINSCORE index query [doc_id] ...

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

query

Sí

Una instrucción de Query DSL (misma sintaxis que TFT.SEARCH).

doc_id

No

Uno o más ID de documentos. Cuando se especifican, solo estos documentos se incluyen en la salida.

Valor de retorno

El mismo conjunto de resultados que TFT.SEARCH, además de un objeto _explanation para cada documento que contiene:

Field

Description

score

La puntuación del documento.

description

La fórmula utilizada para calcular la puntuación.

field

El campo del documento que coincide con los términos de la consulta.

term

El término de la consulta encontrado en el documento.

query_boost

El peso de puntuación aplicado a esta cláusula de consulta.

details

Metadatos y el proceso de puntuación paso a paso.

Ejemplo

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 también: TFT.SEARCH, TFT.EXPLAINCOST

Comandos de autocompletado

TFT.ADDSUG

Agrega una o más entradas de texto de autocompletado con sus pesos asociados.

Sintaxis

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

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

text

Sí

La entrada de texto de autocompletado.

weight

Sí

El peso de puntuación (entero positivo). Los pesos más altos obtienen una mejor posición en los resultados.

Valor de retorno

  • En caso de éxito: el número de entradas de texto agregadas (entero)

  • En caso de fallo: un mensaje de error

Ejemplo

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

Consulte también: TFT.GETSUG, TFT.DELSUG, TFT.SUGNUM

TFT.DELSUG

Elimina una o más entradas de texto de autocompletado de un índice.

Sintaxis

TFT.DELSUG index text [text] ...

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

text

Sí

La entrada de texto exacta que se va a eliminar. Debe ser una coincidencia completa y exacta.

Valor de retorno

  • En caso de éxito: el número de entradas de texto eliminadas (entero)

  • En caso de fallo: un mensaje de error

Ejemplo

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

Consulte también: TFT.ADDSUG, TFT.SUGNUM

TFT.SUGNUM

Obtiene el número de entradas de texto de autocompletado en un índice.

Sintaxis

TFT.SUGNUM index

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

Valor de retorno

  • En caso de éxito: el recuento de entradas (entero)

  • En caso de fallo: un mensaje de error

Ejemplo

TFT.SUGNUM idx:redis
(integer) 3

Consulte también: TFT.ADDSUG, TFT.GETSUG

TFT.GETSUG

Recupera sugerencias de autocompletado que coinciden con un prefijo. Los resultados se devuelven en orden descendente según su peso.

Sintaxis

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

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

prefix

Sí

El prefijo que se debe coincidir.

MAX_COUNT count

No

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

FUZZY

No

Habilita la coincidencia difusa.

Valor de retorno

  • En caso de éxito: una lista de entradas de texto de autocompletado coincidentes

  • En caso de fallo: un mensaje de error

Ejemplo

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

Consulte también: TFT.ADDSUG, TFT.GETALLSUGS

TFT.GETALLSUGS

Recupera todas las entradas de texto de autocompletado de un índice.

Sintaxis

TFT.GETALLSUGS index

Parámetros

Parameter

Required

Description

index

Sí

El nombre del índice.

Valor de retorno

  • En caso de éxito: una lista con todas las entradas de texto de autocompletado

  • En caso de fallo: un mensaje de error

Ejemplo

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

Consulte también: TFT.GETSUG, TFT.ADDSUG

Agregaciones

Agregue una cláusula aggs (o aggregations) a una consulta TFT.SEARCH para realizar agregaciones sobre el conjunto de resultados.

Uso básico

Especifique un nombre de agregación personalizado, un tipo de agregación y un field sobre el cual agregar:

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

La respuesta incluye tanto los resultados de búsqueda de query como los resultados de agregación 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}}}
Agregue "size": 0 a la consulta para devolver solo los resultados de agregación sin documentos.

Agregación de métricas

Las agregaciones de métricas realizan cálculos numéricos sobre campos numéricos (integer, double, etc.) y no admiten subagregaciones anidadas.

Metric

Description

Supported field types

sum

Suma de los valores del campo

Numérico

max

Valor máximo

Numérico

min

Valor mínimo

Numérico

avg

Valor promedio

Numérico

sum_of_squares

Suma de los valores al cuadrado

Numérico

variance

Varianza estadística

Numérico

std_deviation

Desviación estándar

Numérico

value_count

Recuento de valores (sin deduplicación)

Numérico, keyword

extended_stats

Todas las métricas anteriores en una sola respuesta

Numérico

Solo value_count admite campos keyword. El resto de las métricas requiere campos numéricos.

Salida: Un valor DOUBLE calculado a partir del campo especificado.

Agregación de términos

Cuenta valores deduplicados en un campo keyword. Admite subagregaciones anidadas.

Parameter

Description

Default

field

El campo de agregación. Solo se admiten campos keyword.

Obligatorio

size

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

10

order

Orden de clasificación. {"_count": "desc"} ordena por recuento de documentos (predeterminado). {"_key": "asc"} ordena alfabéticamente por valor de campo.

{"_count": "desc"}

min_doc_count

Recuento mínimo de documentos para que un bucket se incluya en los resultados.

1

include

Un patrón de expresión regular o un valor exacto con el que deben coincidir las claves del bucket. Para campos de cadena, se admite la coincidencia mediante expresiones regulares. Para campos de matriz, se requiere una coincidencia exacta.

--

exclude

Un patrón de expresión regular o un valor exacto con el que no deben coincidir las claves del bucket. Si se especifican tanto include como exclude, primero se comprueba include y luego exclude.

--

Salida: Un objeto JSON con buckets. Cada bucket contiene key (el valor del campo) y doc_count (el recuento de documentos):

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

Ejemplo:

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

Agregación de filtro

Filtra los resultados de la consulta mediante una sentencia de consulta y cuenta los documentos coincidentes. Admite subagregaciones anidadas.

Salida: El número de documentos (doc_count) que cumplen la condición del filtro.

Ejemplos de agregación

Los siguientes ejemplos utilizan un conjunto de datos de operaciones bursátiles.

Paso 1: Crear el í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"}}}}'

Paso 2: Agregar 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"}'

Paso 3: Ejecutar consultas

sum -- Monto total de compra por inversionista

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 -- Precio de compra más alto por inversionista

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 -- Precio promedio de compra por inversionista

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 -- Desviación estándar de los precios 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 las estadísticas a la 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 -- Inversionistas con al menos dos transacciones

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}]}}}

Agregación de términos anidada -- Recuento de transacciones por acción con precio promedio

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}}]}}}

Agregación de filtro anidada -- Filtro por inversionista con estadísticas extendidas

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}}}}