全部产品
Search
文档中心

Tablestore:Buat indeks pencarian

更新时间:Nov 30, 2025

Anda dapat menggunakan metode CreateSearchIndex untuk membuat satu atau beberapa indeks pencarian pada tabel data. Saat membuat indeks, Anda harus menentukan bidang yang akan dikueri dan dapat mengonfigurasi opsi lanjutan, seperti kunci routing kustom dan pengurutan awal.

Prasyarat

  • Inisialisasi klien Tablestore. Untuk informasi selengkapnya, lihat Initialize the Tablestore Client.

  • Buat tabel data yang memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Create a data table.

    • max versions harus bernilai 1.

    • time to live (TTL) bernilai -1, atau pembaruan pada tabel data dilarang.

Catatan

Saat membuat indeks pencarian, data type suatu bidang harus sesuai dengan bidang yang bersesuaian di tabel data.

Parameter

Untuk membuat indeks pencarian, Anda harus menentukan nama tabel (TableName), nama indeks pencarian (IndexName), dan skema indeks (IndexSchema). IndexSchema mencakup FieldSchemas (pengaturan bidang), IndexSetting (pengaturan indeks), dan IndexSort (pengaturan pengurutan awal). Tabel berikut menjelaskan parameter-parameter ini secara detail.

Parameter

Deskripsi

TableName

Nama tabel data.

IndexName

Nama indeks pencarian.

FieldSchemas

Daftar objek FieldSchema. Setiap FieldSchema berisi parameter berikut:

  • FieldName (Wajib): Nama bidang yang akan ditambahkan ke indeks pencarian. Ini adalah nama kolom. Tipenya adalah String.

    Bidang dalam indeks pencarian dapat berupa kolom kunci primer atau kolom atribut.

  • FieldType (Wajib): data type bidang tersebut. Tipenya adalah FieldType.XXX.

  • Array (Opsional): Menentukan apakah bidang tersebut merupakan array. Tipenya adalah Boolean.

    Jika Anda mengatur parameter ini ke true, kolom tersebut merupakan array. Saat menulis data, Anda harus menggunakan format array JSON, seperti ["a","b","c"].

    Karena tipe Nested merupakan array, Anda tidak perlu mengatur parameter ini ketika FieldType bernilai Nested.

  • Index (Opsional): Menentukan apakah akan membuat indeks untuk bidang tersebut. Tipenya adalah Boolean.

    Nilai default-nya adalah true. Artinya, indeks terbalik atau indeks spasial dibuat untuk kolom tersebut. Jika Anda mengatur parameter ini ke false, tidak ada indeks yang dibuat untuk kolom tersebut.

  • Analyzer (Opsional): Tipe tokenizer. Anda dapat mengatur parameter ini ketika tipe bidang adalah Text. Jika tidak diatur, tokenizer default-nya adalah tokenisasi kata tunggal.

  • EnableSortAndAgg (Opsional): Menentukan apakah pengurutan dan agregasi diaktifkan untuk bidang tersebut. Tipenya adalah Boolean.

    Anda hanya dapat mengurutkan data berdasarkan bidang yang memiliki EnableSortAndAgg bernilai true.

    Penting

    Pengurutan dan agregasi tidak didukung untuk bidang bertipe Nested. Namun, Anda dapat mengaktifkan pengurutan dan agregasi untuk sub-kolom di dalam bidang Nested.

  • IsVirtualField (Opsional): Menentukan apakah bidang tersebut merupakan virtual column. Tipenya adalah Boolean. Nilai default-nya adalah false. Atur parameter ini hanya jika Anda menggunakan kolom virtual.

  • SourceFieldNames (Opsional): Nama bidang di tabel data. Tipenya adalah String.

    Penting

    Anda harus mengatur parameter ini jika IsVirtualField diatur ke true.

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

    Penting

    Anda harus mengatur parameter ini ketika tipe bidang adalah Date.

IndexSetting

Pengaturan indeks, yang mencakup pengaturan RoutingFields.

RoutingFields (Opsional): Bidang routing kustom. Anda dapat memilih beberapa kolom kunci primer sebagai bidang routing. Dalam kebanyakan kasus, Anda hanya perlu mengatur satu bidang. Jika Anda mengatur beberapa kunci routing, sistem akan menggabungkan nilai-nilainya menjadi satu nilai tunggal.

IndexSort

Pengaturan pengurutan awal indeks, yang mencakup pengaturan Sorters. Jika Anda tidak mengatur parameter ini, data akan diurutkan berdasarkan kunci primer secara default.

Catatan

IndexSort tidak didukung untuk indeks yang berisi bidang Nested. Indeks semacam ini tidak memiliki pengurutan awal.

Sorters (Wajib): Metode pengurutan awal untuk indeks. Anda dapat mengurutkan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya tentang pengurutan, lihat Sorting and pagination.

  • PrimaryKeySort: Mengurutkan berdasarkan kunci primer. Termasuk pengaturan berikut:

    Order: Urutan pengurutan. Anda dapat mengurutkan secara ascending atau descending. Default-nya adalah ascending (DataModel.Search.Sort.SortOrder.ASC).

  • FieldSort: Mengurutkan berdasarkan nilai bidang. Termasuk pengaturan berikut:

    Hanya bidang yang telah diindeks dan memiliki pengurutan serta agregasi yang diaktifkan yang dapat digunakan untuk pengurutan awal.

    • FieldName: Nama bidang yang digunakan untuk pengurutan.

    • Order: Urutan pengurutan. Anda dapat mengurutkan secara ascending atau descending. Default-nya adalah ascending (DataModel.Search.Sort.SortOrder.ASC).

    • Mode: Metode pengurutan yang digunakan ketika suatu bidang memiliki beberapa nilai.

TimeToLive

Contoh

Buat indeks pencarian dengan konfigurasi default

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi tiga kolom: Keyword_type_col (Keyword), Long_type_col (Long), dan Text_type_col (Text). Pengurutan dan agregasi diaktifkan.

/// <summary>
/// Membuat indeks pencarian yang berisi tiga kolom atribut: Keyword_type_col, Long_type_col, dan Text_type_col. Tipenya diatur masing-masing menjadi Keyword (string non-tokenized), Long (integer), dan Text (string tokenized).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    // Atur 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){ // Atur nama bidang dan tipe bidang.
            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
    };
    // Panggil client untuk membuat indeks pencarian.
    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}

Buat indeks pencarian dan tentukan IndexSort

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi tiga kolom: Keyword_type_col (Keyword), Long_type_col (Long), dan Text_type_col (Text). Data diurutkan sebelumnya berdasarkan kolom Long_type_col.

/// <summary>
/// Membuat indeks pencarian yang berisi tiga kolom atribut: Keyword_type_col, Long_type_col, dan Text_type_col. Tipenya diatur masing-masing menjadi Keyword (string non-tokenized), Long (integer), dan Text (string tokenized).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
    // Atur 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){ // Atur nama bidang dan tipe bidang.
            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,
        // Lakukan pengurutan awal berdasarkan kolom Long_type_col. Kolom Long_type_col harus diindeks dan memiliki EnableSortAndAgg yang 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

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi bidang pk0 (Keyword), pk1 (Long), date_col (Date), geo_col (Geo-point), dan col0_v1 (Text). Kolom sumber untuk kolom virtual col0_v1 adalah col0. Hasil diurutkan secara ascending berdasarkan kolom pk1.

/// <summary>
/// Membuat indeks pencarian yang berisi kolom tanggal dan kolom virtual.
/// </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" }
        },
    };

    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;

    otsClient.CreateSearchIndex(request);
}

FAQ

Referensi