Todos los productos
Search
Centro de documentos

Lindorm:Gestión de índices de búsqueda

Última actualización: Sep 05, 2026

Un índice de búsqueda permite consultar cualquier columna en una tabla ancha de LindormTable, no solo las columnas de clave primaria. De forma predeterminada, LindormTable solo admite búsquedas por clave primaria. Agregar un índice de búsqueda habilita consultas de texto completo, coincidencias difusas y filtros de rango en columnas que no son clave, sin necesidad de modificar el esquema de la tabla.

Esta página cubre el ciclo de vida completo: creación de un índice de búsqueda, comprobación de su estado, consulta de datos a través del índice y eliminación del índice. También se abordan las columnas dinámicas, las columnas con comodines y el ajuste del intervalo de actualización.

Requisitos previos

Antes de empezar, asegúrese de cumplir con lo siguiente:

  • Habilitó search index feature

    La función de índice de búsqueda depende de LindormSearch y Lindorm Tunnel Service (LTS). Para habilitar esta función, también debe habilitar LindormSearch y LTS .
  • Una conexión a LindormTable mediante Lindorm-cli

Límites

Los índices de búsqueda tienen límites de uso. Consulte la página Limits antes de utilizarlos en producción.

Configuración de datos de prueba

Los ejemplos en esta página utilizan una tabla llamada search_table. Ejecute las siguientes sentencias para crear la tabla e insertar datos de prueba.

  1. Cree la base de datos y la tabla.

    CREATE DATABASE searchindex_db;
    USE searchindex_db;
    CREATE TABLE IF NOT EXISTS search_table (
      user_id BIGINT,
      name VARCHAR,
      age SMALLINT,
      gender VARCHAR,
      address VARCHAR,
      email VARCHAR,
      city VARCHAR,
      PRIMARY KEY (user_id)
    );
  2. Inserte cuatro filas de datos de prueba.

    UPSERT INTO search_table (user_id,name,age,gender,address,email,city) VALUES (1, 'Zhang', 18, 'M', 'Chaoyang District, Beijing', 'a***@example.net', 'Beijing');
    UPSERT INTO search_table (user_id,name,age,gender,address,email,city) VALUES (6, 'Li', 32, 'M', 'Yuhang District, Hangzhou', 'a***@example.net', 'Hangzhou');
    UPSERT INTO search_table (user_id,name,age,gender,address,email,city) VALUES (20, 'Wang', 28, 'M', 'Binjiang District, Hangzhou', 'a***@example.net', 'Hangzhou');
    UPSERT INTO search_table (user_id,name,age,gender,address,email,city) VALUES (28, 'Chen', 36, 'F', 'Nanshan District, Shenzhen', 'a***@example.net', 'Shenzhen');
  3. Compruebe los datos.

    SELECT * FROM search_table LIMIT 10;

    Salida esperada:

    +---------+--------+-----+--------+-----------------------------+------------------+----------+
    | user_id |  name  | age | gender |           address           |      email       |   city   |
    +---------+--------+-----+--------+-----------------------------+------------------+----------+
    | 1       | Zhang  | 18  | M      | Chaoyang District, Beijing  | a***@example.net | Beijing  |
    | 6       | Li     | 32  | M      | Yuhang District, Hangzhou   | a***@example.net | Hangzhou |
    | 20      | Wang   | 28  | M      | Binjiang District, Hangzhou | a***@example.net | Hangzhou |
    | 28      | Chen   | 36  | F      | Nanshan District, Shenzhen  | a***@example.net | Shenzhen |
    +---------+--------+-----+--------+-----------------------------+------------------+----------+

Creación de un índice de búsqueda

El objetivo de este índice de ejemplo es:

  • Buscar en cualquier columna de la tabla

  • Ejecutar consultas tokenizadas (de texto completo) en la columna address mediante el analizador IK

  • Ejecutar consultas difusas en la columna email

  1. Create the search index.

    CREATE INDEX IF NOT EXISTS idx USING SEARCH ON search_table (
      name,
      age,
      gender,
      address(type=text, analyzer=ik),
      email,
      city
    ) WITH (numShards=4);
    - numShards controla en cuántos fragmentos se divide el índice. En este ejemplo, numShards=4 crea cuatro fragmentos. El valor predeterminado es el doble del número de nodos de LindormSearch. Planifique la cantidad de fragmentos antes de crear un índice para producción y así evitar sobrecargar fragmentos individuales. Para obtener orientación, consulte numShards parameter description . - El campo address se configura con type=text, analyzer=ik para que la tokenización del analizador IK se aplique a las consultas de texto completo en esa columna. - De forma predeterminada, Lindorm compila el índice de búsqueda de manera asíncrona en segundo plano. Cuantos más datos históricos contenga la tabla, más tiempo tardará la compilación. Para compilar el índice de forma síncrona, agregue la palabra clave SYNC al final de la sentencia. - Para ver los errores comunes al ejecutar CREATE INDEX , consulte FAQ .
  2. Compruebe el estado del índice.

    SHOW INDEX FROM search_table;

    Salida esperada:

    +----------------+--------------+------------+-------------+------------+---------------+------------------------------------+-----------+-------------------+
    |  TABLE_SCHEMA  |  DATA_TABLE  | INDEX_NAME | INDEX_STATE | INDEX_TYPE | INDEX_COVERED |            INDEX_COLUMN            | INDEX_TTL | INDEX_DESCRIPTION |
    +----------------+--------------+------------+-------------+------------+---------------+------------------------------------+-----------+-------------------+
    | searchindex_db | search_table | idx        | BUILDING    | SEARCH     | NA            | address,city,age,gender,name,email | 0         |                   |
    +----------------+--------------+------------+-------------+------------+---------------+------------------------------------+-----------+-------------------+

    El campo INDEX_STATE muestra el estado actual de la compilación. Los estados válidos son:

    Estado

    Significado

    BUILDING

    El índice se está compilando. Las consultas que dependen del índice aún no están disponibles.

    ACTIVE

    El índice está listo. Todas las columnas indexadas admiten consultas.

    DISABLED

    El índice se deshabilitó manualmente y no se utiliza para consultas.

    Espere hasta que el estado sea ACTIVE antes de ejecutar consultas respaldadas por el índice. Para consultar las definiciones de los campos, vea SHOW INDEX. Para rastrear el progreso completo de la compilación, inicie sesión en LTS console y luego elija Lindorm Search > Full Sync en el panel de navegación izquierdo.

  3. Consulte datos a través del índice.

    SELECT * FROM search_table WHERE name='Wang' AND age > 18 AND city='Hangzhou';

    Salida esperada:

    +---------+------+-----+--------+-----------------------------+------------------+----------+
    | user_id | name | age | gender |           address           |      email       |   city   |
    +---------+------+-----+--------+-----------------------------+------------------+----------+
    | 20      | Wang | 28  | M      | Binjiang District, Hangzhou | a***@example.net | Hangzhou |
    +---------+------+-----+--------+-----------------------------+------------------+----------+

    Para más ejemplos de consultas, consulte Query wide table data using a search index. Para confirmar qué motor utiliza una consulta, ejecute EXPLAIN statement.

Eliminación de un índice de búsqueda

Ejecute la siguiente sentencia para delete the search index.

DROP INDEX IF EXISTS idx ON search_table;
Importante

Para versiones de LindormTable anteriores a la 2.7.7, deshabilite el índice antes de eliminarlo:

ALTER INDEX IF EXISTS idx ON search_table DISABLED;

Después de que el estado cambie a DISABLED, elimine el índice con DROP INDEX IF EXISTS idx ON search_table;. Para volver a habilitar un índice deshabilitado, ejecute ALTER INDEX IF EXISTS idx ON search_table REBUILD;.

Uso de columnas dinámicas

Las columnas dinámicas permiten escribir datos en columnas que no se definieron al crear la tabla. Para que las columnas dinámicas permitan búsquedas, agréguelas explícitamente a un índice de búsqueda.

  1. Enable dynamic columns en la tabla.

    ALTER TABLE search_table SET 'DYNAMIC_COLUMNS' = 'true';
  2. Agregue la columna dinámica a un índice de búsqueda. En este ejemplo, password es una columna dinámica que no se incluyó en el esquema original de la tabla.

    • Al crear un nuevo índice, incluya la columna dinámica en la lista de columnas:

      CREATE INDEX idx USING SEARCH ON search_table(user_id,name,age,gender,password);
    • Para agregar la columna a un índice existente, utilice ALTER INDEX:

      ALTER INDEX idx ON search_table ADD COLUMNS(password);
  3. Write data to the dynamic column. Solo puede escribir datos en la columna password en formato HexString.

    UPSERT INTO search_table (user_id,name,age,gender,address,email,city,password)
    VALUES (30, 'Wang', 38, 'F', 'Nanshan District, Shenzhen', 'a***@example.net', 'Shenzhen', 'ef0011');
  4. Query the dynamic column. Solo puede consultar la columna password cuando los datos se almacenan en formato HexString.

    SELECT * FROM search_table WHERE password='ef0011' LIMIT 1;

    Salida esperada:

    +---------+------+-----+--------+----------------------------+------------------+----------+----------+
    | user_id | name | age | gender |          address           |      email       |   city   | password |
    +---------+------+-----+--------+----------------------------+------------------+----------+----------+
    | 30      | Wang | 38  | F      | Nanshan District, Shenzhen | a***@example.net | Shenzhen | 0xef0011 |
    +---------+------+-----+--------+----------------------------+------------------+----------+----------+

Uso de columnas con comodines

Una columna con comodín es aquella cuyo nombre contiene un carácter de comodín (*). Cualquier columna escrita en la tabla cuyo nombre coincida con el patrón del comodín se trata automáticamente como parte de esa columna con comodín, y hereda su tipo de datos y configuración de analizador, sin necesidad de predefinirla. Esto resulta útil cuando necesita escribir datos en muchas columnas que siguen un patrón de nomenclatura consistente. Para más contexto, consulte Wildcard columns.

  1. Create a table with wildcard columns. Este ejemplo define info_* y address_* como columnas con comodines.

    CREATE TABLE search_table (
      user_id BIGINT,
      name VARCHAR,
      age SMALLINT,
      `info_*` VARCHAR,
      `address_*` VARCHAR,
      PRIMARY KEY (user_id)
    ) WITH (wildcard_column='info_*,address_*');
  2. Agregue las columnas con comodines a un índice de búsqueda. La columna con comodín address_* se configura con el analizador IK para consultas tokenizadas.

    CREATE INDEX idx USING SEARCH ON search_table (
      name,
      age,
      `info_*`,
      `address_*`(type=text, analyzer=ik)
    );
  3. Escriba datos. Columnas como info_gender, info_email y info_city coinciden con info_*; address_detail coincide con address_*. Estas columnas se crean automáticamente durante la escritura.

    UPSERT INTO search_table (user_id,name,age,info_gender,address_detail,info_email,info_city) VALUES (1, 'Zhang', 18, 'M', 'Chaoyang District, Beijing', 'a***@example.net', 'Beijing');
    UPSERT INTO search_table (user_id,name,age,info_gender,address_detail,info_email,info_city) VALUES (6, 'Li', 32, 'M', 'Yuhang District, Hangzhou', 'a***@example.net', 'Hangzhou');
    UPSERT INTO search_table (user_id,name,age,info_gender,address_detail,info_email,info_city) VALUES (20, 'Wang', 28, 'M', 'Binjiang District, Hangzhou', 'a***@example.net', 'Hangzhou');
    UPSERT INTO search_table (user_id,name,age,info_gender,address_detail,info_email,info_city) VALUES (28, 'Chen', 36, 'F', 'Nanshan District, Shenzhen', 'a***@example.net', 'Shenzhen');
  4. Consulte las columnas con comodines.

    SELECT * FROM search_table WHERE name='Wang' AND age > 18 AND info_city='Hangzhou' LIMIT 10;

    Salida esperada:

    +---------+------+-----+-----------------------------+-----------+------------------+-------------+
    | user_id | name | age |       address_detail        | info_city |    info_email    | info_gender |
    +---------+------+-----+-----------------------------+-----------+------------------+-------------+
    | 20      | Wang | 28  | Binjiang District, Hangzhou | Hangzhou  | a***@example.net | M           |
    +---------+------+-----+-----------------------------+-----------+------------------+-------------+
    Para comprobar que la consulta se enruta al índice de búsqueda, ejecute: EXPLAIN SELECT * FROM search_table WHERE name='Wang' AND age > 18 AND info_city='Hangzhou' LIMIT 10;

Configuración del intervalo de actualización

Los índices de búsqueda ofrecen consistencia eventual. Los datos escritos en la tabla ancha solo permiten búsquedas después de que finaliza el siguiente ciclo de actualización.

LindormSearch actualiza los datos del índice a un intervalo fijo, que es de 15 segundos de forma predeterminada. Reducir el intervalo disminuye el retraso entre la escritura y la disponibilidad para búsqueda, pero aumenta la carga en LindormSearch. Ajuste la configuración según sus requisitos de latencia y la capacidad del clúster.

  • Si su carga de trabajo requiere que los datos permitan búsquedas inmediatamente después de una escritura, establezca el intervalo en 1s.

  • Si el rendimiento de escritura es alto y no se requiere una actualización estricta de los datos, mantenga el valor predeterminado de 15s o auméntelo.

El ajuste del intervalo de actualización requiere LindormTable versión 2.8.6.1 o posterior. Para comprobar o actualizar su versión, consulte LindormTable version guide y minor version update .

El intervalo de actualización se controla mediante la propiedad SEARCH_INDEX_VISIBILITY_TRIGGER_INTERVAL.

  • Establezca el intervalo en un índice existente:

    ALTER INDEX idx ON search_table SET SEARCH_INDEX_VISIBILITY_TRIGGER_INTERVAL='1s';
  • Establezca el intervalo al crear un nuevo índice:

    CREATE INDEX idx USING SEARCH ON search_table (name) WITH (SEARCH_INDEX_VISIBILITY_TRIGGER_INTERVAL='1s');
  • Compruebe el intervalo actual:

    SHOW INDEX FROM search_table;

Preguntas frecuentes

Error "The Lindorm Search cluster address is null" al crear un índice

La función de índice de búsqueda no está habilitada. Habilite search index feature y luego vuelva a ejecutar la sentencia CREATE INDEX.

Error "Only one search index is allowed to be created"

Cada tabla admite solo un índice de búsqueda y ya existe uno. Si ya no necesita el índice actual, elimínelo con la sentencia DROP INDEX y luego cree uno nuevo.

¿Cómo puedo ver el progreso completo de compilación de un índice de búsqueda?

Inicie sesión en LTS console. En el panel de navegación izquierdo, elija Lindorm Search > Full Sync.