全部产品
Search
文档中心

Tablestore:Buat indeks pencarian

更新时间:Dec 07, 2025

Gunakan metode CreateSearchIndex untuk membuat indeks pencarian pada tabel data. Satu tabel data mendukung beberapa indeks pencarian. Saat membuat indeks pencarian, tambahkan bidang-bidang yang ingin Anda kueri ke dalam indeks tersebut. Anda juga dapat mengonfigurasi opsi lanjutan, seperti routing fields dan presorting.

Prasyarat

  • Inisialisasi client Tablestore. Untuk informasi selengkapnya, lihat Initialize a 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 operasi pembaruan pada tabel data dinonaktifkan.

Catatan penggunaan

  • Tipe data bidang dalam indeks pencarian harus sesuai dengan tipe data bidang di tabel data. Untuk informasi selengkapnya, lihat Data types.

  • Untuk menetapkan nilai time to live (TTL) selain -1 pada indeks pencarian, Anda harus menonaktifkan operasi UpdateRow pada tabel data. Nilai TTL indeks pencarian harus kurang dari atau sama dengan nilai TTL tabel data. Untuk informasi selengkapnya, lihat Lifecycle management.

API

public class CreateSearchIndexRequest implements Request {
    /** The name of the data table. */
    private String tableName;
    /** The name of the search index. */
    private String indexName;
    /** The schema of the search index. */
    private IndexSchema indexSchema;
    /**
     * You do not need to set this parameter in most cases.
     * Set this parameter using the setter method only when you dynamically modify the search index schema. This parameter specifies the name of the source search index for reindexing.
     */
    private String sourceIndexName;
    /** The TTL for index data, in seconds. After you create the search index, you can call the UpdateSearchIndex operation to dynamically change this parameter. */
    private Integer timeToLive;
}

public class IndexSchema implements Jsonizable {
    /** The settings of the index. */
    private IndexSetting indexSetting;
    /** The settings for all fields in the index. */
    private List<FieldSchema> fieldSchemas;
    /** The custom presorting method for the index. */
    private Sort indexSort;
}

Parameter

Saat membuat indeks pencarian, Anda harus menentukan nama tabel data (tableName), nama indeks pencarian (indexName), dan skema indeks (indexSchema). indexSchema mencakup skema bidang (fieldSchemas), pengaturan indeks (indexSetting), dan pengaturan presorting indeks (indexSort). Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

tableName

Nama tabel data.

indexName

Nama indeks pencarian.

fieldSchemas

Daftar bidang indeks. Setiap fieldSchema berisi parameter berikut:

  • fieldName (Wajib): Nama bidang yang akan diindeks, yaitu nama kolom. Tipe: String.

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

  • fieldType (Wajib): Tipe data bidang tersebut. Tentukan tipe dalam format FieldType.XXX.

    Catatan
    • Untuk menyimpan dan mengkueri data dengan hubungan logis multilapis, Anda dapat menggunakan tipe Nested untuk menyimpan data.

    • Untuk menyimpan dan mengkueri data berformat JSON, Anda dapat menyimpan data sebagai string dalam tabel data. Kemudian, gunakan tipe array dan Nested dalam indeks pencarian untuk melakukan kueri fleksibel terhadap data JSON tersebut.

    • Untuk aplikasi yang memerlukan geo-query, Anda dapat menggunakan tipe bidang Geo-point untuk menyimpan data.

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

    Nilai default adalah true, artinya indeks terbalik atau indeks spasial dibuat untuk kolom tersebut. Jika diatur ke false, tidak ada indeks yang dibuat untuk kolom ini.

  • enableHighlighting (Opsional): Menentukan apakah akan mengaktifkan fitur summary and highlighting. Tipe: Boolean. Nilai default adalah false. Untuk menggunakan fitur summary and highlighting, atur parameter ini ke true. Hanya bidang bertipe Text yang mendukung fitur ini.

  • analyzer (Opsional): Tipe tokenizer. Anda dapat mengatur parameter ini untuk bidang bertipe Text. Jika tidak diatur, tokenisasi kata tunggal digunakan secara default.

  • analyzerParameter (Opsional): Pengaturan parameter untuk tokenizer. Atur parameter berdasarkan tipe tokenizer. Parameter ini wajib jika Anda mengatur parameter analyzer.

  • enableSortAndAgg (Opsional): Menentukan apakah akan mengaktifkan sorting dan agregasi. Tipe: Boolean. Nilai default adalah true.

    Anda hanya dapat mengurutkan berdasarkan bidang yang enableSortAndAgg-nya diatur ke true.

    Penting

    Bidang bertipe Text tidak mendukung sorting dan agregasi. Untuk mengurutkan atau mengagregasi bidang Text, Anda dapat menggunakan kolom virtual bertipe Keyword. Untuk informasi selengkapnya, lihat Virtual columns.

  • isArray (Opsional): Menentukan apakah bidang tersebut merupakan array. Tipe: Boolean.

    Jika diatur ke true, kolom tersebut merupakan array. Data yang ditulis ke kolom tersebut harus dalam format array JSON, misalnya ["a","b","c"].

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

  • subFieldSchemas (Opsional): Untuk bidang bertipe Nested, gunakan parameter ini untuk mengatur tipe indeks sub-kolom. Tipenya adalah daftar FieldSchema.

  • isVirtualField (Opsional): Menentukan apakah bidang tersebut merupakan kolom virtual. Tipe: Boolean. Nilai default adalah false. Untuk menggunakan kolom virtual, atur parameter ini ke true.

  • sourceFieldName (Opsional): Nama bidang sumber dalam tabel data. Tipe: String. Parameter ini wajib jika isVirtualField diatur ke true.

  • dateFormats (Opsional): Format tanggal. Tipe: String. Parameter ini wajib untuk bidang bertipe Date. Untuk informasi selengkapnya, lihat Date and time types.

  • vectorOptions (Opsional): Properti bidang vektor. Parameter ini wajib untuk bidang bertipe Vector. Parameter ini mencakup hal-hal berikut:

    • dataType: Tipe data vektor. Saat ini hanya float32 yang didukung. Untuk kebutuhan tipe data lainnya, submit a ticket.

    • dimension: Jumlah dimensi vektor. Jumlah maksimum dimensi untuk bidang Vector adalah 4.096.

    • metricType: Algoritma untuk mengukur jarak antar vektor. Algoritma yang didukung: Jarak Euclidean (euclidean), cosine similarity (cosine), dan dot product (dot_product).

      • Jarak Euclidean (euclidean): Jarak garis lurus antara dua vektor dalam ruang multidimensi. Untuk alasan performa, algoritma Jarak Euclidean di Tablestore tidak melakukan perhitungan akar kuadrat akhir. Skor Jarak Euclidean yang lebih besar menunjukkan tingkat kemiripan yang lebih tinggi antara dua vektor.

      • Cosine similarity (cosine): Cosinus sudut antara dua vektor dalam ruang vektor. Skor cosine similarity yang lebih tinggi menunjukkan tingkat kemiripan yang lebih tinggi antara dua vektor. Ini sering digunakan untuk menghitung kemiripan data teks.

      • Dot product (dot_product): Mengalikan koordinat yang bersesuaian dari dua vektor dengan dimensi yang sama, lalu menjumlahkan hasilnya. Skor dot product yang lebih tinggi menunjukkan tingkat kemiripan yang lebih tinggi antara dua vektor.

      Untuk informasi tentang cara memilih algoritma pengukuran jarak, lihat Distance metric algorithms.

  • jsonType (Opsional): Tipe indeks untuk data JSON. Nilai yang valid: OBJECT dan NESTED. Parameter ini wajib saat tipe bidang adalah JSON.

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, cukup atur satu saja. Jika Anda mengatur beberapa routing key, sistem akan menggabungkan nilainya menjadi satu nilai tunggal.

indexSort

Pengaturan presorting indeks, yang mencakup pengaturan sorters. Jika tidak diatur, data diurutkan berdasarkan kunci primer secara default.

Catatan

Parameter indexSort tidak didukung untuk indeks yang mengandung tipe Nested. Tidak ada presorting yang dilakukan.

sorters (Opsional): Daftar metode presorting untuk indeks. Anda dapat mengurutkan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya tentang sorting, lihat Sorting and pagination.

  • PrimaryKeySort mengurutkan data berdasarkan kunci primer. Pengaturan yang tersedia:

    order: Urutan pengurutan. Anda dapat mengurutkan secara ascending atau descending. Default-nya adalah ascending (SortOrder.ASC).

  • FieldSort mengurutkan data berdasarkan nilai bidang. Hanya bidang yang diindeks dan memiliki sorting serta agregasi yang diaktifkan yang dapat digunakan untuk presorting. Pengaturan yang tersedia:

    • fieldName: Nama bidang yang digunakan untuk pengurutan.

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

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

sourceIndexName

Opsional. Anda tidak perlu mengatur parameter ini dalam kebanyakan kasus.

Atur parameter ini menggunakan metode setter hanya ketika Anda memodifikasi skema indeks pencarian secara dinamis. Parameter ini menentukan nama indeks pencarian sumber untuk pengindeksan ulang.

timeToLive

Untuk informasi selengkapnya tentang cara menggunakan siklus hidup indeks pencarian, lihat Lifecycle management.

Contoh

Buat indeks pencarian dengan konfigurasi default

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi tiga kolom: Col_Keyword (tipe KEYWORD), Col_Long (tipe LONG), dan Col_Vector (tipe VECTOR). Data diurutkan sebelumnya berdasarkan kunci primer tabel data dan tidak pernah kedaluwarsa.

private static void createSearchIndex(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    // Set the data table name.
    request.setTableName("<TABLE_NAME>"); 
    // Set the search index name.
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            // Set the field name and type.
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG),
            // Set the vector type.
            new FieldSchema("Col_Vector", FieldType.VECTOR).setIndex(true)
                    // The vector dimension is 4, and the similarity algorithm is dot product.
                    .setVectorOptions(new VectorOptions(VectorDataType.FLOAT_32, 4, VectorMetricType.DOT_PRODUCT))
    ));
    request.setIndexSchema(indexSchema);
    // Call the client to create the search index.
    client.createSearchIndex(request); 
}

Buat indeks pencarian dan tentukan IndexSort

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi empat kolom: Col_Keyword (tipe KEYWORD), Col_Long (tipe LONG), Col_Text (tipe TEXT), dan Timestamp (tipe LONG). Data diurutkan sebelumnya berdasarkan kolom Timestamp.

private static void createSearchIndexWithIndexSort(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    // Set the data table name.
    request.setTableName("<TABLE_NAME>"); 
    // Set the search index name.
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            new FieldSchema("Col_Keyword", FieldType.KEYWORD),
            new FieldSchema("Col_Long", FieldType.LONG),
            new FieldSchema("Col_Text", FieldType.TEXT),
            new FieldSchema("Timestamp", FieldType.LONG)
                    .setEnableSortAndAgg(true)));
    // Set presorting by the Timestamp column.
    indexSchema.setIndexSort(new Sort(
            Arrays.<Sort.Sorter>asList(new FieldSort("Timestamp", SortOrder.ASC))));
    request.setIndexSchema(indexSchema);
    // Call the client to create the search index.
    client.createSearchIndex(request);
}

Buat indeks pencarian dan atur siklus hidup

Penting

Pastikan bahwa pembaruan pada tabel data telah dinonaktifkan.

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi dua kolom: Col_Keyword (tipe KEYWORD) dan Col_Long (tipe LONG). Siklus hidup indeks pencarian diatur menjadi 7 hari.

// Use Tablestore SDK for Java 5.12.0 or later.
public static void createIndexWithTTL(SyncClient client) {
    int days = 7;
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    // Set the data table name.
    request.setTableName("<TABLE_NAME>");
    // Set the search index name.
    request.setIndexName("<SEARCH_INDEX_NAME>");
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            // Set the field name and type.
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG)));
    request.setIndexSchema(indexSchema);
    // Set the TTL for the search index.
    request.setTimeToLiveInDays(days);
    // Call the client to create the search index.
    client.createSearchIndex(request);
}

Buat indeks pencarian dan tentukan kolom virtual

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi dua kolom: Col_Keyword (tipe KEYWORD) dan Col_Long (tipe LONG), serta mencakup dua kolom virtual: Col_Keyword_Virtual_Long (tipe LONG), yang dipetakan ke kolom Col_Keyword di tabel data, dan Col_Long_Virtual_Keyword (tipe KEYWORD), yang dipetakan ke kolom Col_Long di tabel data.

private static void createSearchIndex(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    // Set the data table name.
    request.setTableName("<TABLE_NAME>"); 
    // Set the search index name.
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
        // Set the field name and type.
        new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
        // Set the field name and type.
        new FieldSchema("Col_Keyword_Virtual_Long", FieldType.LONG) 
             // Specify whether the field is a virtual column.
            .setVirtualField(true) 
             // The corresponding field in the data table for the virtual column.
            .setSourceFieldName("Col_Keyword"), 
        new FieldSchema("Col_Long", FieldType.LONG),
        new FieldSchema("Col_Long_Virtual_Keyword", FieldType.KEYWORD)
            .setVirtualField(true)
            .setSourceFieldName("Col_Long")));
    request.setIndexSchema(indexSchema);
    // Call the client to create the search index.
    client.createSearchIndex(request); 
}

Aktifkan summary dan highlighting saat membuat indeks pencarian

Contoh berikut menunjukkan cara membuat indeks pencarian yang berisi tiga kolom: Col_Keyword (tipe KEYWORD), Col_Long (tipe LONG), dan Col_Text (tipe TEXT). Fitur summary dan highlighting diaktifkan untuk kolom Col_Text.

private static void createSearchIndexWithHighlighting(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    // Set the data table name.
    request.setTableName("<TABLE_NAME>"); 
    // Set the search index name.
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            // Set the field name and type.
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG),
            // Enable the summary and highlighting feature for the field.
            new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true).setEnableHighlighting(true)
    ));
    request.setIndexSchema(indexSchema);
    // Call the client to create the search index.
    client.createSearchIndex(request); 
}

FAQ

Referensi