All Products
Search
Document Center

Tablestore:Buat indeks pencarian

Last Updated:Aug 08, 2026

Gunakan Tablestore SDK untuk Go guna membuat indeks pencarian serta mengonfigurasi bidang indeks, presorting, TTL, kolom virtual, dan highlighting.

Prasyarat

Sebelum memulai, lakukan persiapan berikut:

  • Instal Tablestore Go SDK dan inisialisasi klien.

  • Tabel data telah dibuat, dan jumlah maksimum versinya diatur ke 1.

  • Tabel data memiliki nilai time-to-live (TTL) sebesar -1, atau pembaruan menggunakan UpdateRow dinonaktifkan.

Deskripsi

Panggil CreateSearchIndex untuk membuat indeks pencarian pada tabel data. Anda dapat membuat beberapa indeks pencarian untuk satu tabel data. Tentukan tabel data, nama indeks, dan skema indeks lengkap, lalu tambahkan kolom yang dapat dikueri ke FieldSchemas. Tipe data bidang indeks harus sesuai dengan tipe data kolom tabel yang bersesuaian. Untuk tipe yang didukung, lihat Data types.

func (client *tablestore.TableStoreClient) CreateSearchIndex(request *tablestore.CreateSearchIndexRequest) (*tablestore.CreateSearchIndexResponse, error)
Catatan

Pembuatan indeks pencarian bersifat asinkron. Setelah permintaan berhasil, tunggu hingga data indeks tersinkronisasi sebelum melakukan kueri terhadap indeks tersebut.

Contoh berikut membuat indeks pencarian yang berisi bidang Keyword dan Long. Jika presorting dan TTL tidak dikonfigurasi, indeks akan diurutkan berdasarkan kunci primer dan datanya tidak kedaluwarsa.

tableName := "example_table"
indexName := "example_index"

request := &tablestore.CreateSearchIndexRequest{
    TableName: tableName,
    IndexName: indexName,
    IndexSchema: &tablestore.IndexSchema{
        FieldSchemas: []*tablestore.FieldSchema{
            {
                FieldName: proto.String("category"),
                FieldType: tablestore.FieldType_KEYWORD,
                Index:     proto.Bool(true),
            },
            {
                FieldName:        proto.String("price"),
                FieldType:        tablestore.FieldType_LONG,
                Index:            proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
            },
        },
    },
}

_, err := client.CreateSearchIndex(request)
if err != nil {
    log.Fatal(err)
}

Parameter

CreateSearchIndexRequest berisi parameter berikut.

Name

Type

Description

TableName (required)

string

Nama tabel data.

IndexName (required)

string

Nama indeks pencarian.

IndexSchema (required)

*tablestore.IndexSchema

Skema indeks.

SourceIndexName (optional)

*string

Indeks sumber yang digunakan untuk memodifikasi skema secara dinamis. Untuk informasi selengkapnya, lihat Dynamically modify a search index schema.

TimeToLive (optional)

*int32

TTL data indeks dalam satuan detik. Nilai default: -1. Nilai yang valid adalah -1 dan bilangan bulat int32 yang tidak kurang dari 86.400. Nilai -1 menunjukkan bahwa data tidak pernah kedaluwarsa. Untuk nilai selain -1, pembaruan menggunakan UpdateRow harus dinonaktifkan, dan TTL indeks tidak boleh melebihi TTL tabel. Untuk informasi selengkapnya, lihat Configure the TTL of a search index.

Skema indeks

Name

Type

Description

FieldSchemas (required)

[]*tablestore.FieldSchema

Daftar bidang indeks.

IndexSetting (optional)

*tablestore.IndexSetting

Pengaturan indeks.

IndexSort (optional)

*search.Sort

Konfigurasi presorting indeks. Jika parameter ini dihilangkan dan indeks tidak berisi bidang Nested, indeks akan diurutkan berdasarkan kunci primer. Presorting tidak didukung untuk indeks yang berisi bidang Nested.

Bidang indeks

Name

Type

Description

FieldName (required)

*string

Nama bidang indeks, yang dapat berkorespondensi dengan kolom kunci primer atau kolom atribut.

FieldType (required)

tablestore.FieldType

Tipe data bidang indeks.

Index (optional)

*bool

Menentukan apakah akan membuat indeks terbalik (inverted) atau spasial. Untuk bidang selain Nested dan JSON, nilai yang dihilangkan dianggap sebagai true.

IndexOptions (optional)

*tablestore.IndexOptions

Granularitas konten indeks untuk bidang Text. Parameter ini biasanya dihilangkan.

Analyzer (optional)

*tablestore.Analyzer

Alat analisis untuk bidang Text. Jika dihilangkan, tokenisasi kata tunggal akan digunakan.

AnalyzerParameter (optional)

interface{}

Parameter alat analisis. Konfigurasikan parameter ini berdasarkan nilai Analyzer.

EnableSortAndAgg (optional)

*bool

Menentukan apakah pengurutan dan agregasi diaktifkan. Fitur ini tidak didukung untuk bidang Text dan Nested, tetapi didukung untuk bidang turunan dari bidang Nested.

EnableHighlighting (optional)

*bool

Menentukan apakah ringkasan dan highlighting diaktifkan. Hanya bidang Text yang mendukung fitur ini. Nilai default: false.

Store (optional)

*bool

Menentukan apakah nilai asli bidang disimpan dalam indeks pencarian. Jika diaktifkan, ReturnAllFromIndex dapat mengembalikan nilai tersebut.

IsArray (optional)

*bool

Menentukan apakah bidang tersebut merupakan array. Nilai array harus ditulis dalam format array JSON. Jangan konfigurasikan parameter ini untuk bidang Nested.

FieldSchemas (optional)

[]*tablestore.FieldSchema

Bidang turunan dari bidang Nested atau JSON. Parameter ini wajib untuk bidang Nested dan JSON.

IsVirtualField (optional)

*bool

Menentukan apakah bidang tersebut merupakan kolom virtual. Nilai default: false.

SourceFieldNames (optional)

[]string

Bidang sumber yang dipetakan ke kolom virtual. Parameter ini wajib untuk kolom virtual. Hanya satu bidang sumber yang didukung.

DateFormats (optional)

[]string

Format tanggal yang didukung oleh bidang Date. Parameter ini wajib untuk bidang Date.

VectorOptions (optional)

*tablestore.VectorOptions

Konfigurasi vektor untuk bidang Vector. Parameter ini wajib untuk bidang Vector.

JsonType (optional)

*tablestore.JsonType

Tipe indeks untuk bidang JSON. Nilai yang valid: JsonType_OBJECT dan JsonType_NESTED. Parameter ini wajib untuk bidang JSON.

TextSimilarity (optional)

*tablestore.TextSimilarity

Algoritma kemiripan untuk bidang Text. Nilai yang valid: TextSimilarity_BM25 dan TextSimilarity_SHORT_TEXT.

Konfigurasi vektor

Name

Type

Description

VectorDataType (required)

*tablestore.VectorDataType

Tipe data vektor. Hanya VectorDataType_FLOAT_32 yang didukung.

VectorMetricType (required)

*tablestore.VectorMetricType

Metrik jarak. Jarak Euclidean, kemiripan kosinus, dan dot product didukung.

Dimension (required)

*int32

Dimensi vektor. Nilai maksimum: 4096.

Pengaturan indeks

Name

Type

Description

RoutingFields (optional)

[]string

Bidang routing kustom. Anda dapat menentukan satu atau beberapa kolom kunci primer. Baris dengan nilai routing yang sama akan ditulis ke partisi indeks yang sama.

Konfigurasi presorting

Name

Type

Description

Sorters (required)

[]search.Sorter

Presorter. PrimaryKeySort dan FieldSort didukung. Bidang yang digunakan oleh FieldSort harus mengaktifkan pengurutan dan agregasi. Untuk informasi selengkapnya, lihat Sort and paginate results.

Contoh

Konfigurasi presorting indeks

indexSort := &search.Sort{Sorters: []search.Sorter{
    &search.FieldSort{
        FieldName: "price",
        Order:     search.SortOrder_ASC.Enum(),
    },
}}

request := &tablestore.CreateSearchIndexRequest{
    TableName: "example_table",
    IndexName: "example_index",
    IndexSchema: &tablestore.IndexSchema{
        FieldSchemas: []*tablestore.FieldSchema{
            {
                FieldName:        proto.String("price"),
                FieldType:        tablestore.FieldType_LONG,
                Index:            proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
            },
        },
        IndexSort: indexSort,
    },
}

_, err := client.CreateSearchIndex(request)
if err != nil {
    log.Fatal(err)
}

Konfigurasi TTL indeks

ttl := int32(7 * 24 * 60 * 60)
request := &tablestore.CreateSearchIndexRequest{
    TableName:  "example_table",
    IndexName:  "example_index",
    TimeToLive: &ttl,
    IndexSchema: &tablestore.IndexSchema{
        FieldSchemas: []*tablestore.FieldSchema{
            {
                FieldName: proto.String("category"),
                FieldType: tablestore.FieldType_KEYWORD,
                Index:     proto.Bool(true),
            },
        },
    },
}

_, err := client.CreateSearchIndex(request)
if err != nil {
    log.Fatal(err)
}

Konfigurasi alat analisis

analyzer := tablestore.Analyzer_Split
delimiter := ","
fields := []*tablestore.FieldSchema{
    {
        FieldName: proto.String("tags"),
        FieldType: tablestore.FieldType_TEXT,
        Index:     proto.Bool(true),
        Analyzer:  &analyzer,
        AnalyzerParameter: tablestore.SplitAnalyzerParameter{
            Delimiter: &delimiter,
        },
    },
}

Buat bidang vektor

fields := []*tablestore.FieldSchema{
    {
        FieldName: proto.String("embedding"),
        FieldType: tablestore.FieldType_VECTOR,
        Index:     proto.Bool(true),
        VectorOptions: &tablestore.VectorOptions{
            VectorDataType:   tablestore.VectorDataType_FLOAT_32.Enum(),
            VectorMetricType: tablestore.VectorMetricType_COSINE.Enum(),
            Dimension:        proto.Int32(4),
        },
    },
}

Buat kolom virtual

fields := []*tablestore.FieldSchema{
    {
        FieldName: proto.String("price"),
        FieldType: tablestore.FieldType_LONG,
        Index:     proto.Bool(true),
    },
    {
        FieldName:        proto.String("price_text"),
        FieldType:        tablestore.FieldType_KEYWORD,
        Index:            proto.Bool(true),
        IsVirtualField:   proto.Bool(true),
        SourceFieldNames: []string{"price"},
    },
}

Aktifkan ringkasan dan highlighting

analyzer := tablestore.Analyzer_SingleWord
fields := []*tablestore.FieldSchema{
    {
        FieldName:          proto.String("description"),
        FieldType:          tablestore.FieldType_TEXT,
        Index:              proto.Bool(true),
        Analyzer:           &analyzer,
        EnableHighlighting: proto.Bool(true),
    },
}