All Products
Search
Document Center

Tablestore:Buat indeks pencarian

Last Updated:Jul 24, 2026

Buat indeks pencarian untuk sebuah tabel dan konfigurasikan bidang indeks, pengurutan awal, waktu hidup (TTL), kolom virtual, serta penyorotan menggunakan Tablestore SDK for Java.

Prasyarat

Sebelum memulai, pastikan bahwa:

  • Anda telah menginstal Tablestore SDK for Java dan menginisialisasi klien.

  • Tabel sudah ada dan jumlah maksimum versi datanya adalah 1.

  • TTL tabel bernilai -1, atau pembaruan dengan UpdateRow dinonaktifkan.

Deskripsi

Panggil createSearchIndex untuk membuat indeks pencarian pada sebuah tabel. Anda dapat membuat beberapa indeks pencarian untuk tabel yang sama. Dalam permintaan tersebut, tentukan nama tabel, nama indeks, dan skema indeks lengkap, lalu tambahkan kolom yang ingin Anda kueri ke dalam fieldSchemas. Tipe data setiap bidang indeks harus sesuai dengan tipe kolom yang bersesuaian di tabel.

public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
Catatan

Pembuatan indeks pencarian bersifat asinkron. Setelah permintaan berhasil, kueri informasi indeks dan tunggu hingga status indeks berubah menjadi RUNNING sebelum melakukan kueri data.

Contoh berikut membuat example_index untuk example_table dengan bidang Keyword dan Long. Tanpa pengaturan pengurutan awal atau TTL, indeks diurutkan berdasarkan kunci primer dan datanya tidak kedaluwarsa.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG)));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);

client.createSearchIndex(request);

Parameter

CreateSearchIndexRequest berisi parameter berikut:

Name

Type

Description

tableName (required)

String

Nama tabel.

indexName (required)

String

Nama indeks pencarian.

indexSchema (required)

IndexSchema

Skema indeks.

sourceIndexName (optional)

String

Nama indeks sumber untuk pembuatan ulang indeks. Tetapkan parameter ini hanya saat Anda memodifikasi skema indeks pencarian secara dinamis.

timeToLive (optional)

Integer

TTL data indeks dalam detik. Nilai default: -1. Tetapkan parameter ini ke -1 atau bilangan bulat minimal 86.400. Nilai -1 berarti data tidak kedaluwarsa. Tablestore secara otomatis menghapus data setelah periode retensinya melebihi nilai ini.

Untuk menetapkan nilai selain -1, nonaktifkan pembaruan UpdateRow pada tabel. TTL indeks tidak boleh melebihi TTL tabel. Setelah indeks dibuat, Anda dapat memanggil updateSearchIndex untuk mengubah nilainya. Untuk menentukan TTL dalam satuan hari, panggil setTimeToLiveInDays. Untuk informasi lebih lanjut, lihat Konfigurasi TTL indeks pencarian.

Skema indeks

indexSchema bertipe IndexSchema dan berisi parameter berikut.

Name

Type

Description

fieldSchemas (required)

List<FieldSchema>

Bidang-bidang indeks.

indexSetting (optional)

IndexSetting

Pengaturan indeks.

indexSort (optional)

Sort

Pengaturan pengurutan awal indeks. Jika parameter ini tidak ditetapkan dan indeks tidak mengandung bidang Nested, Tablestore mengurutkan berdasarkan kunci primer. Indeks Nested tidak mendukung pengurutan awal.

Bidang indeks

Setiap elemen dalam indexSchema.fieldSchemas[] bertipe FieldSchema dan berisi parameter berikut.

Name

Type

Description

fieldName (required)

String

Nama bidang indeks. Bidang ini dapat dipetakan ke kolom kunci primer atau kolom atribut.

fieldType (required)

FieldType

Tipe bidang indeks. Gunakan Nested untuk hubungan multilapis, JSON untuk data berformat JSON, dan Geo-point untuk data geografis. Anda juga dapat menyimpan data berformat JSON sebagai string dan mengkuerinya dengan bidang array atau Nested.

index (optional)

boolean

Menentukan apakah akan membuat indeks terbalik atau spasial untuk bidang tersebut. Nilai default: true. Jika diatur ke false, tidak ada indeks yang dibuat untuk bidang tersebut.

enableHighlighting (optional)

boolean

Menentukan apakah akan mengaktifkan ringkasan dan penyorotan. Hanya bidang Text yang mendukung fitur ini. Nilai default: false.

analyzer (optional)

String

Alat analisis untuk bidang Text. Jika parameter ini tidak ditetapkan, tokenisasi karakter tunggal digunakan.

analyzerParameter (optional)

AnalyzerParameter

Pengaturan alat analisis. Jika Anda menetapkan analyzer, Anda harus mengonfigurasi parameter yang diperlukan oleh alat analisis tersebut.

enableSortAndAgg (optional)

boolean

Menentukan apakah akan mengaktifkan pengurutan dan agregasi. Nilai default: true. Bidang Text tidak mendukung pengurutan atau agregasi. Untuk mengurutkan atau mengagregasi konten Text, buat kolom virtual bertipe Keyword.

isArray (optional)

boolean

Menentukan apakah bidang tersebut merupakan array. Tulis nilai array sebagai array JSON. Anda tidak perlu menetapkan parameter ini untuk bidang Nested.

subFieldSchemas (optional)

List<FieldSchema>

Subbidang dari bidang Nested. Parameter ini wajib untuk bidang Nested.

isVirtualField (optional)

boolean

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

sourceFieldNames (optional)

List<String>

Kolom tabel yang dipetakan ke kolom virtual. Parameter ini wajib untuk kolom virtual.

dateFormats (optional)

List<String>

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

vectorOptions (optional)

VectorOptions

Tipe data vektor, dimensi, dan metrik jarak. Parameter ini wajib untuk bidang Vector.

jsonType (optional)

JsonType

Tipe indeks bidang JSON. Nilai yang valid: OBJECT dan NESTED. Parameter ini wajib untuk bidang JSON.

Opsi vektor

indexSchema.fieldSchemas[].vectorOptions bertipe VectorOptions dan berisi parameter berikut.

Name

Type

Description

dataType (required)

VectorDataType

Tipe data vektor. Hanya FLOAT_32 yang didukung.

dimension (required)

Integer

Dimensi vektor. Nilai maksimum: 4.096.

metricType (required)

VectorMetricType

Metrik jarak. Nilai yang valid: EUCLIDEAN, COSINE, dan DOT_PRODUCT. Skor yang lebih tinggi menunjukkan kemiripan yang lebih besar.

EUCLIDEAN mengukur jarak garis lurus dan menghilangkan perhitungan akar kuadrat terakhir di Tablestore. COSINE mengukur kosinus sudut antara vektor dan umum digunakan untuk kemiripan teks. DOT_PRODUCT mengalikan koordinat yang bersesuaian dari vektor berdimensi sama dan menjumlahkan hasilnya. Untuk informasi lebih lanjut, lihat Algoritma metrik jarak.

Pengaturan indeks

indexSchema.indexSetting bertipe IndexSetting dan berisi parameter berikut.

Name

Type

Description

routingFields (optional)

List<String>

Bidang routing kustom. Pilih satu atau beberapa kolom kunci primer. Dalam kebanyakan kasus, satu bidang sudah cukup. Jika Anda menentukan beberapa bidang, Tablestore menggabungkan nilainya. Tablestore menggunakan nilai bidang routing untuk mendistribusikan data indeks dan menulis catatan dengan nilai yang sama ke partisi data yang sama.

Pengurutan awal indeks

indexSchema.indexSort bertipe Sort dan berisi parameter berikut.

Name

Type

Description

sorters (optional)

List<Sort.Sorter>

Pengurut awal. PrimaryKeySort mengurutkan berdasarkan kunci primer, dan FieldSort mengurutkan berdasarkan nilai bidang. Bidang yang digunakan dalam FieldSort harus diindeks dengan pengurutan dan agregasi diaktifkan. Untuk informasi lebih lanjut, lihat Urutkan dan halaman hasil.

Pengurutan kunci primer

Elemen pada path indexSchema.indexSort.sorters[] dengan tipe PrimaryKeySort melakukan pengurutan awal berdasarkan kunci primer dan berisi parameter berikut.

Name

Type

Description

order (optional)

SortOrder

Urutan pengurutan kunci primer. Nilai yang valid: SortOrder.ASC dan SortOrder.DESC. Nilai default: SortOrder.ASC.

Pengurutan bidang

Elemen pada path indexSchema.indexSort.sorters[] dengan tipe FieldSort melakukan pengurutan awal berdasarkan nilai bidang dan berisi parameter berikut.

Name

Type

Description

fieldName (required)

String

Bidang yang digunakan untuk pengurutan awal.

order (optional)

SortOrder

Urutan pengurutan bidang. Nilai yang valid: SortOrder.ASC dan SortOrder.DESC. Nilai default: SortOrder.ASC.

mode (optional)

SortMode

Metode pengurutan untuk bidang bernilai ganda.

Contoh

Konfigurasi pengurutan awal indeks

Contoh berikut melakukan pengurutan awal data indeks berdasarkan bidang created_at secara menaik.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("description", FieldType.TEXT),
        new FieldSchema("created_at", FieldType.LONG)
                .setEnableSortAndAgg(true)));
indexSchema.setIndexSort(new Sort(
        Collections.<Sort.Sorter>singletonList(
                new FieldSort("created_at", SortOrder.ASC))));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);

Konfigurasi TTL indeks

Contoh berikut mengonfigurasi TTL tujuh hari. Gunakan Tablestore SDK for Java versi 5.12.0 atau yang lebih baru.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG)));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
request.setTimeToLiveInDays(7);
client.createSearchIndex(request);

Buat kolom virtual

Contoh berikut memetakan bidang Keyword category ke kolom virtual bertipe Long dan bidang Long price ke kolom virtual bertipe Keyword.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("category_as_long", FieldType.LONG)
                .setVirtualField(true)
                .setSourceFieldName("category"),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("price_as_keyword", FieldType.KEYWORD)
                .setVirtualField(true)
                .setSourceFieldName("price")));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);

Aktifkan ringkasan dan penyorotan

Contoh berikut mengaktifkan ringkasan dan penyorotan untuk bidang Text description.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("description", FieldType.TEXT)
                .setEnableHighlighting(true)));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);