Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):Acelerar consultas de varias columnas con TairSearch

Última actualización: Sep 08, 2026

TairSearch es un sistema de búsqueda en tiempo real que opera por completo en memoria e integra la caché y el procesamiento. Su mecanismo principal de índice invertido no solo admite consultas de coincidencia aproximada sobre raíces de palabras, sino que también permite usar TairSearch como almacenamiento de datos frecuentes. Esta integración de procesamiento y almacenamiento acelera las consultas de varias columnas sin importar cuántas sean.

Contexto

Muchas aplicaciones guardan información clave en una base de datos relacional como MySQL. Para reducir la carga de la base de datos y mejorar el rendimiento, los desarrolladores suelen agregar un sistema de caché KV como Redis para atender las consultas de datos frecuentes. Sin embargo, cuando un caso de uso requiere consultas de varias columnas o consultas de coincidencia aproximada con LIKE en la base de datos, un sistema de caché KV estándar no puede resolver estos escenarios por sí solo. Esto exige mecanismos adicionales de filtrado y coincidencia, como scripts de Lua o procesamiento externo, para ejecutar consultas de varias columnas.

Limitaciones de los sistemas de caché KV en escenarios de consultas de varias columnas

Al importar datos de una base de datos relacional a un sistema de caché KV como Redis, normalmente se almacena cada fila en un hash de Redis. La clave primaria de la fila se convierte en la clave del hash de Redis, mientras que los nombres y valores de las demás columnas pasan a ser los campos y valores del hash.

Con el comando HMGET de Redis, se recuperan directamente los campos especificados mediante la clave primaria. No obstante, una base de datos relacional puede tener no solo una clave primaria, sino también varios índices secundarios y diversos índices de varias columnas para mejorar la eficiencia de las consultas. Redis presenta limitaciones importantes en los siguientes escenarios:

  • Consultas por índice secundario: Redis no admite consultar un hash por los valores de sus campos. Por lo tanto, construya un índice independiente en Redis para relacionar los valores del índice secundario con las claves primarias. Esta solución aumenta la complejidad de la importación de datos y desperdicia memoria debido a la redundancia de la información.

  • Consultas de varias columnas: Redis no admite consultas sobre un hash basadas en los valores de varios campos. Implemente este tipo de consultas usted mismo; por ejemplo, mediante scripts de Lua o lógica externa de la aplicación.

Este tema utiliza como ejemplo un servicio de búsqueda de boletos de avión durante un pico de tráfico para demostrar cómo TairSearch acelera las consultas de varias columnas.

Nota

Para obtener más información sobre TairSearch y ejemplos de comandos, consulte Search.

Búsqueda exacta de vuelos

Las búsquedas de vuelos hacia destinos turísticos populares pueden provocar picos de tráfico durante periodos vacacionales largos, como las vacaciones de verano, el Día Nacional y el Festival de Primavera. Para manejar estos picos, almacene toda la información de los próximos vuelos en TairSearch.

Paso 1: Cree un índice de documentos

En una plataforma típica de reserva de vuelos, una búsqueda exacta involucra varios criterios clave: origen, destino, fecha de viaje, clase de asiento y si el pasajero viaja con niños o bebés.

En este ejemplo, el nombre del índice de TairSearch (departure_destination) es la concatenación de las ubicaciones de origen y destino; por ejemplo, zhuhai_hangzhou. A continuación, se crean los siguientes campos de índice: origen (departure), destino (destination), fecha (date), asiento (seat), si viaja con niños o bebés (with), identificador del vuelo (flight_id), precio (price), hora de salida (departure_time) y hora de llegada (destination_time).

Nota

Para agregar o modificar campos, ejecute el comando TFT.UPDATEINDEX.

Comando de ejemplo:

TFT.CREATEINDEX zhuhai_hangzhou '{
    "mappings":{
        "properties":{
            "departure":{"type":"keyword"},
            "destination":{"type":"keyword"},
            "date":{"type":"keyword"},
            "seat":{"type":"keyword"},
            "with":{"type":"keyword"},
            "flight_id":{"type":"keyword"},
            "price":{"type":"double"},
            "departure_time":{"type":"long"},
            "destination_time":{"type":"long"}
        }
    }
}'

Resultado esperado:

OK

Paso 2: Escriba los datos

Escriba la información del vuelo como un documento en el índice de TairSearch. A continuación se muestra un comando de ejemplo:

TFT.ADDDOC zhuhai_hangzhou '{
    "departure":"zhuhai",
    "destination":"hangzhou",
    "date":"2022-09-01",
    "seat":"first",
    "with":"baby",
    "flight_id":"CZ1000",
    "price":986.1,
    "departure_time":1661991010,
    "destination_time":1661998210
}'

Resultado esperado:

"{"_id":"16615908912020060"}"
# Returns the ID of the new document.

Paso 3: Búsqueda exacta

Para buscar vuelos de primera clase de Zhuhai a Hangzhou el 1 de septiembre de 2022, ordenados por hora de salida, ejecute el siguiente comando:

TFT.Search zhuhai_hangzhou '{"sort":["departure_time"],"query":{"bool":{"must":[{"term":{"date":"2022-09-01"}},{"term":{"seat":"first"}}]}}}'

Resultado esperado:

"{
    "hits": {
        "hits": [
            {
                "_id": "16615908912020060",
                "_index": "zhuhai_hangzhou",
                "_score": 0.433955,
                "_source": {
                    "departure": "zhuhai",
                    "destination": "hangzhou",
                    "date": "2022-09-01",
                    "seat": "first",
                    "with": "baby",
                    "flight_id": "CZ1000",
                    "price": 986.1,
                    "departure_time": 1661991010,
                    "destination_time": 1661998210
                }
            }
        ],
        "max_score": 0.433955,
        "total": {
            "relation": "eq",
            "value": 1
        }
    }
}"