All Products
Search
Document Center

Tablestore:Ubah skema indeks pencarian secara dinamis

Last Updated:Aug 08, 2026

Gunakan Tablestore SDK untuk Go guna membuat indeks pengindeksan ulang berdasarkan indeks pencarian sumber dan ubah skemanya tanpa mengganggu operasi baca atau tulis pada tabel.

Prasyarat

Pasang Tablestore Go SDK dan inisialisasi klien.

Deskripsi

Modifikasi skema secara dinamis melibatkan pembuatan indeks pengindeksan ulang, sinkronisasi data, validasi indeks baru dengan traffic, lalu pergantian indeks. Operasi baca dan tulis pada tabel tetap berjalan selama proses ini, dan kode kueri yang menggunakan nama indeks sumber tidak perlu diubah. Alur kerjanya sebagai berikut:

  1. Buat indeks pengindeksan ulang yang berisi skema baru lengkap berdasarkan indeks sumber.

  2. Tunggu hingga indeks pengindeksan ulang memasuki Sinkronisasi inkremental dan tersinkronisasi penuh dengan indeks sumber.

  3. Alokasikan traffic kueri sesuai kebutuhan dan validasi hasil dari skema baru.

  4. Lakukan pergantian indeks setelah hasilnya sesuai ekspektasi.

  5. Amati indeks tersebut selama periode tertentu, lalu hapus indeks pengindeksan ulang yang mengarah ke skema lama setelah Anda memastikan operasi berjalan normal.

    Penting

    Nama indeks pengindeksan ulang harus diakhiri dengan _reindex. Target indeks dan bobot traffic berubah selama alur kerja. Jangan gunakan nama indeks pengindeksan ulang sebagai titik akhir kueri jangka panjang. Anda dapat membuat hingga lima indeks secara bersamaan. Sebelum memulai batch berikutnya, tunggu hingga batch saat ini tersinkronisasi penuh dengan indeks sumber atau menyelesaikan pergantian indeks.

1. Buat indeks pengindeksan ulang

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

Setelah permintaan berhasil, gunakan Kueri informasi indeks pencarian untuk memeriksa skema dan status sinkronisasi. Nilai SyncPhase sebesar INCR menunjukkan Sinkronisasi inkremental. Sebelum mengalokasikan traffic, pastikan juga bahwa sinkronisasi telah tersinkronisasi penuh dengan indeks sumber.

2. Konfigurasikan traffic kueri

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

Mulailah dengan jumlah traffic kueri yang kecil untuk memvalidasi skema baru, lalu tingkatkan secara bertahap bobot indeks pengindeksan ulang. Total bobot kedua indeks harus berjumlah 100.

3. Ganti indeks

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

Setelah pergantian, nama indeks sumber mengarah ke skema baru, sedangkan nama indeks pengindeksan ulang mengarah ke skema lama. Amati indeks baru selama periode tertentu dan hapus indeks pengindeksan ulang hanya setelah Anda memastikan operasi berjalan normal.

Parameter

Buat indeks pengindeksan ulang

Name

Type

Description

TableName (required)

string

Nama tabel data.

IndexName (required)

string

Nama indeks pengindeksan ulang, yang harus diakhiri dengan _reindex.

SourceIndexName (required)

*string

Nama indeks sumber.

IndexSchema (required)

*tablestore.IndexSchema

Skema indeks terbaru yang lengkap. Untuk parameter bidang, routing, dan presorting, lihat Buat indeks pencarian.

TimeToLive (optional)

*int32

TTL indeks pengindeksan ulang. Untuk nilai dan batasan yang valid, lihat Konfigurasikan TTL indeks pencarian.

Konfigurasikan traffic dan ganti indeks

Name

Type

Description

TableName (required)

string

Nama tabel data.

IndexName (required)

string

Nama indeks sumber.

QueryFlowWeights (optional)

[]*tablestore.QueryFlowWeight

Bobot traffic untuk indeks sumber dan indeks pengindeksan ulang.

SwitchIndexName (optional)

*string

Indeks pengindeksan ulang yang targetnya ditukar dengan indeks sumber.