Todos los productos
Search
Centro de documentos

Tablestore:Modificación dinámica del esquema de un índice de búsqueda

Última actualización: Sep 03, 2026

Utilice el Tablestore SDK for Go para crear un índice de reindexación a partir de un índice de búsqueda de origen y modifique el esquema sin interrumpir las operaciones de lectura o escritura de la tabla.

Requisitos previos

Instale Tablestore Go SDK e inicialice un cliente.

Descripción

La modificación dinámica del esquema crea un índice de reindexación, sincroniza los datos, valida el nuevo índice con tráfico real y cambia los índices. Las lecturas y escrituras en la tabla continúan durante el proceso, y el código de consulta que usa el nombre del índice de origen no requiere cambios. El flujo de trabajo es el siguiente:

  1. Cree un índice de reindexación que contenga el nuevo esquema completo, basado en el índice de origen.

  2. Espere hasta que el índice de reindexación entre en sincronización incremental y se ponga al día respecto al índice de origen.

  3. Asigne tráfico de consulta según sea necesario y valide los resultados del nuevo esquema.

  4. Cambie los índices cuando los resultados cumplan con las expectativas.

  5. Monitoree el índice durante un periodo y elimine el índice de reindexación que apunta al esquema anterior tras confirmar su funcionamiento correcto.

    Importante

    El nombre del índice de reindexación debe terminar con _reindex. Los destinos del índice y los pesos de tráfico cambian durante el flujo de trabajo. No use el nombre del índice de reindexación como endpoint de consulta permanente. Puede reconstruir hasta cinco índices simultáneamente. Antes de iniciar el siguiente lote, espere a que el lote actual se sincronice con los índices de origen o complete el cambio de índices.

1. Crear un índice de reindexación

sourceIndexName := "example_index"
reindexName := "example_index_reindex"

newSchema := []*tablestore.FieldSchema{
    {
        FieldName: proto.String("category"),
        FieldType: tablestore.FieldType_KEYWORD,
        Index:     proto.Bool(true),
    },
    {
        FieldName: proto.String("new_field"),
        FieldType: tablestore.FieldType_KEYWORD,
        Index:     proto.Bool(true),
    },
}

_, err := client.CreateSearchIndex(&tablestore.CreateSearchIndexRequest{
    TableName:       "example_table",
    IndexName:       reindexName,
    SourceIndexName: &sourceIndexName,
    IndexSchema: &tablestore.IndexSchema{
        FieldSchemas: newSchema,
    },
})
if err != nil {
    log.Fatal(err)
}

Cuando la solicitud se complete correctamente, use Query search index information para comprobar el esquema y el estado de sincronización. Un valor SyncPhase igual a INCR indica que la sincronización es incremental. Antes de asignar tráfico, confirme también que la sincronización se puso al día con el índice de origen.

2. Configure el tráfico de consulta

weights := []*tablestore.QueryFlowWeight{
    {IndexName: "example_index", Weight: 50},
    {IndexName: "example_index_reindex", Weight: 50},
}

_, err := client.UpdateSearchIndex(&tablestore.UpdateSearchIndexRequest{
    TableName:        "example_table",
    IndexName:        "example_index",
    QueryFlowWeights: weights,
})
if err != nil {
    log.Fatal(err)
}

Comience con poco tráfico de consulta para validar el nuevo esquema y aumente gradualmente el peso del índice de reindexación. La suma de los valores Weight de ambos índices debe ser igual a 100.

3. Cambiar índices

reindexName := "example_index_reindex"
_, err := client.UpdateSearchIndex(&tablestore.UpdateSearchIndexRequest{
    TableName:       "example_table",
    IndexName:       "example_index",
    SwitchIndexName: &reindexName,
})
if err != nil {
    log.Fatal(err)
}

Tras el cambio, el nombre del índice de origen apunta al nuevo esquema, mientras que el nombre del índice de reindexación apunta al esquema anterior. Monitoree el nuevo índice durante un periodo y elimine el índice de reindexación únicamente tras confirmar su funcionamiento correcto.

Parámetros

Cree el índice de reindexación

Nombre

Tipo

Descripción

TableName (obligatorio)

string

Nombre de la tabla de datos.

IndexName (obligatorio)

string

Nombre del índice de reindexación; debe terminar con _reindex.

SourceIndexName (obligatorio)

*string

Nombre del índice de origen.

IndexSchema (obligatorio)

*tablestore.IndexSchema

Esquema completo y actualizado del índice. Para los parámetros de campos, enrutamiento y preordenamiento, consulte Create a search index.

TimeToLive (opcional)

*int32

TTL del índice de reindexación. Para valores válidos y restricciones, consulte Configure the TTL of a search index.

Configure el tráfico y cambiar índices

Nombre

Tipo

Descripción

TableName (obligatorio)

string

Nombre de la tabla de datos.

IndexName (obligatorio)

string

Nombre del índice de origen.

QueryFlowWeights (opcional)

[]*tablestore.QueryFlowWeight

Pesos de tráfico para los índices de origen y de reindexación.

SwitchIndexName (opcional)

*string

Índice de reindexación cuyo destino se intercambia con el del índice de origen.