All Products
Search
Document Center

Tablestore:Buat indeks pencarian

Last Updated:May 01, 2026

Buat satu atau beberapa indeks pencarian untuk tabel data menggunakan metode CreateSearchIndex. Saat membuat indeks pencarian, tentukan bidang-bidang yang akan dikueri dan, secara opsional, konfigurasikan opsi lanjutan seperti kunci routing kustom dan pengurutan awal.

Prasyarat

Sebelum memulai, pastikan bahwa:

  • Klien Tablestore telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize the Tablestore Client.

  • Tabel data telah dibuat dan memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Create a data table.

    • Jumlah maksimum versi diatur ke 1.

    • Waktu hidup (TTL) diatur ke -1, atau pembaruan pada tabel data dinonaktifkan.

Kompatibilitas tipe bidang

Tipe data setiap bidang dalam indeks pencarian harus sesuai dengan tipe data bidang yang bersesuaian di tabel data.

Parameter

Untuk membuat indeks pencarian, tentukan nama tabel (TableName), nama indeks pencarian (IndexName), dan skema indeks (IndexSchema). IndexSchema mencakup FieldSchemas (pengaturan bidang), IndexSetting (pengaturan indeks), dan IndexSort (pengaturan pengurutan awal).

Parameter

Deskripsi

TableName

Nama tabel data.

IndexName

Nama indeks pencarian.

FieldSchemas

Daftar objek FieldSchema. Setiap objek FieldSchema berisi parameter berikut:

  • FieldName (Wajib): Nama bidang dalam indeks pencarian, yang bersesuaian dengan nama kolom. Tipe: String. Bidang ini dapat berupa kolom kunci primer atau kolom atribut.

  • FieldType (Wajib): Tipe data bidang tersebut. Tipe: FieldType.XXX.

  • Array (Opsional): Menentukan apakah bidang menyimpan data array. Tipe: Boolean. Jika diatur ke true, tulis data dalam format array JSON, seperti ["a","b","c"]. Tipe Nested secara inheren merupakan array—jangan atur parameter ini jika FieldType adalah Nested.

  • Index (Opsional): Menentukan apakah pengindeksan diaktifkan untuk bidang tersebut. Tipe: Boolean. Default: true. Jika diaktifkan, indeks terbalik atau indeks spasial dibuat untuk kolom tersebut. Atur ke false untuk melewati pengindeksan.

  • Analyzer (Opsional): Tipe pemisah kata. Hanya berlaku jika FieldType adalah Text. Default: tokenisasi kata tunggal.

  • EnableSortAndAgg (Opsional): Menentukan apakah pengurutan dan agregasi diaktifkan untuk bidang tersebut. Tipe: Boolean. Hanya bidang dengan nilai true yang mendukung Pengurutan. Tipe Nested tidak mendukung pengurutan dan agregasi; namun, sub-kolom di dalam bidang Nested mendukungnya.

  • IsVirtualField (Opsional): Menentukan apakah bidang tersebut merupakan kolom virtual. Tipe: Boolean. Default: false. Atur parameter ini hanya untuk kolom virtual.

  • SourceFieldNames (Opsional): Nama kolom sumber di tabel data. Tipe: String. Wajib jika IsVirtualField bernilai true.

  • DateFormats (Opsional): Format tanggal. Tipe: String. Wajib jika FieldType adalah Date. Untuk informasi selengkapnya, lihat Date and time types.

IndexSetting

Pengaturan indeks. Berisi parameter berikut:

RoutingFields (Opsional): Bidang routing kustom. Pilih satu atau beberapa kolom kunci primer sebagai bidang routing. Dalam kebanyakan kasus, satu bidang routing sudah cukup—jika Anda menetapkan beberapa kunci routing, sistem akan menggabungkan nilainya menjadi satu nilai tunggal. Data dengan nilai bidang routing yang sama akan diindeks ke partisi data yang sama.

IndexSort

Pengaturan pengurutan awal untuk indeks. Jika tidak ditentukan, data diurutkan berdasarkan kunci primer secara default. Indeks yang berisi bidang Nested tidak mendukung IndexSort.

Sorters (Wajib): Metode pengurutan awal. Mendukung pengurutan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya, lihat Sorting and pagination.

  • PrimaryKeySort: Mengurutkan berdasarkan kunci primer. Atur parameter Order untuk menentukan urutan menaik atau menurun. Default: menaik (DataModel.Search.Sort.SortOrder.ASC).

  • FieldSort: Mengurutkan berdasarkan nilai bidang. Hanya bidang yang diindeks dan memiliki pengurutan serta agregasi yang diaktifkan yang dapat digunakan untuk pengurutan awal. Berisi pengaturan berikut:

    • FieldName: Nama bidang yang digunakan untuk pengurutan.

    • Order: Urutan pengurutan. Default: menaik (DataModel.Search.Sort.SortOrder.ASC).

    • Mode: Mode pengurutan saat bidang berisi beberapa nilai.

TimeToLive

Opsional. Waktu hidup (TTL) data dalam indeks pencarian, dalam satuan detik. Default: -1 (data tidak pernah kedaluwarsa). Nilai minimum: 86400 detik (satu hari). Data yang kedaluwarsa akan dibersihkan secara otomatis ketika periode retensi melebihi TTL yang dikonfigurasi.

Contoh

Buat indeks pencarian dengan konfigurasi default

Buat indeks pencarian dengan tiga bidang: Keyword_type_col (Keyword), Long_type_col (Long), dan Text_type_col (Text), dengan pengurutan dan agregasi diaktifkan pada bidang Keyword dan Long.

/// <summary>
/// Membuat indeks pencarian dengan tiga kolom atribut: Keyword_type_col, Long_type_col, dan Text_type_col.
/// Tipe bidang: Keyword (string tidak ditokenisasi), Long (integer), dan Text (string ditokenisasi).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    // Tetapkan nama tabel dan nama indeks pencarian.
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
            index = true,            // Aktifkan pengindeksan.
            EnableSortAndAgg = true  // Aktifkan pengurutan dan agregasi.
        },
        new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
        new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas
    };
    // Buat indeks pencarian.
    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}

Buat indeks pencarian dan tentukan IndexSort

Buat indeks pencarian dengan tiga bidang: Keyword_type_col (Keyword), Long_type_col (Long), dan Text_type_col (Text). Hasil diurutkan sebelumnya berdasarkan bidang Long_type_col dalam urutan menaik.

/// <summary>
/// Membuat indeks pencarian dengan tiga kolom atribut: Keyword_type_col, Long_type_col, dan Text_type_col.
/// Tipe bidang: Keyword (string tidak ditokenisasi), Long (integer), dan Text (string ditokenisasi).
/// Mengurutkan hasil sebelumnya berdasarkan Long_type_col dalam urutan menaik.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
    // Tetapkan nama tabel dan nama indeks pencarian.
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
            index = true,
            EnableSortAndAgg = true
        },
        new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
        new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas,
        // Urutkan sebelumnya berdasarkan Long_type_col (menaik). Bidang harus memiliki EnableSortAndAgg diaktifkan.
        IndexSort = new DataModel.Search.Sort.Sort()
        {
            Sorters = new List<DataModel.Search.Sort.ISorter>
            {
                new DataModel.Search.Sort.FieldSort(Long_type_col, DataModel.Search.Sort.SortOrder.ASC)
            }
        }
    };

    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}

Buat indeks pencarian yang berisi kolom tanggal dan kolom virtual

Buat indeks pencarian dengan lima bidang: pk0 (Keyword), pk1 (Long), date_col (Date), geo_col (Geo-point), dan col0_v1 (Text). Kolom virtual col0_v1 dipetakan ke kolom sumber col0. Hasil diurutkan sebelumnya berdasarkan pk1 dalam urutan menaik.

/// <summary>
/// Membuat indeks pencarian yang mencakup bidang Date dan kolom virtual.
/// Kolom virtual col0_v1 dipetakan ke kolom sumber col0 di tabel data.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    List<FieldSchema> fieldSchemas = new List<FieldSchema> {
        new FieldSchema("pk0", FieldType.KEYWORD)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("pk1", FieldType.LONG)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("date_col", FieldType.DATE)
        {
            index = true,
            DateFormats = new List<string>(){
                "yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
                "yyyy-MM-dd'T'HH:mm:ss.SSS"
            }
        },

        new FieldSchema("geo_col", FieldType.GEO_POINT)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("col0_v1", FieldType.TEXT)
        {
            index = true,
            Analyzer = Analyzer.Split,
            AnalyzerParameter = new SingleWordAnalyzerParameter(true, true),
            IsVirtualField = true,
            SourceFieldNames = new List<string> { "col0" }  // Dipetakan ke kolom sumber col0.
        },
    };

    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = fieldSchemas,
        IndexSort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.ASC) })
    };
    request.TimeToLive = -1;  // Data tidak pernah kedaluwarsa.

    otsClient.CreateSearchIndex(request);
}

FAQ

Lanjutan