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
UpdateRowdinonaktifkan.
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)
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) |
|
Nama tabel. |
|
indexName (required) |
|
Nama indeks pencarian. |
|
indexSchema (required) |
|
Skema indeks. |
|
sourceIndexName (optional) |
|
Nama indeks sumber untuk pembuatan ulang indeks. Tetapkan parameter ini hanya saat Anda memodifikasi skema indeks pencarian secara dinamis. |
|
timeToLive (optional) |
|
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 |
Skema indeks
indexSchema bertipe IndexSchema dan berisi parameter berikut.
|
Name |
Type |
Description |
|
fieldSchemas (required) |
|
Bidang-bidang indeks. |
|
indexSetting (optional) |
|
Pengaturan indeks. |
|
indexSort (optional) |
|
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) |
|
Nama bidang indeks. Bidang ini dapat dipetakan ke kolom kunci primer atau kolom atribut. |
|
fieldType (required) |
|
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) |
|
Menentukan apakah akan membuat indeks terbalik atau spasial untuk bidang tersebut. Nilai default: |
|
enableHighlighting (optional) |
|
Menentukan apakah akan mengaktifkan ringkasan dan penyorotan. Hanya bidang Text yang mendukung fitur ini. Nilai default: |
|
analyzer (optional) |
|
Alat analisis untuk bidang Text. Jika parameter ini tidak ditetapkan, tokenisasi karakter tunggal digunakan. |
|
analyzerParameter (optional) |
|
Pengaturan alat analisis. Jika Anda menetapkan |
|
enableSortAndAgg (optional) |
|
Menentukan apakah akan mengaktifkan pengurutan dan agregasi. Nilai default: |
|
isArray (optional) |
|
Menentukan apakah bidang tersebut merupakan array. Tulis nilai array sebagai array JSON. Anda tidak perlu menetapkan parameter ini untuk bidang Nested. |
|
subFieldSchemas (optional) |
|
Subbidang dari bidang Nested. Parameter ini wajib untuk bidang Nested. |
|
isVirtualField (optional) |
|
Menentukan apakah bidang tersebut merupakan kolom virtual. Nilai default: |
|
sourceFieldNames (optional) |
|
Kolom tabel yang dipetakan ke kolom virtual. Parameter ini wajib untuk kolom virtual. |
|
dateFormats (optional) |
|
Format tanggal yang didukung oleh bidang Date. Parameter ini wajib untuk bidang Date. |
|
vectorOptions (optional) |
|
Tipe data vektor, dimensi, dan metrik jarak. Parameter ini wajib untuk bidang Vector. |
|
jsonType (optional) |
|
Tipe indeks bidang JSON. Nilai yang valid: |
Opsi vektor
indexSchema.fieldSchemas[].vectorOptions bertipe VectorOptions dan berisi parameter berikut.
|
Name |
Type |
Description |
|
dataType (required) |
|
Tipe data vektor. Hanya |
|
dimension (required) |
|
Dimensi vektor. Nilai maksimum: 4.096. |
|
metricType (required) |
|
Metrik jarak. Nilai yang valid:
|
Pengaturan indeks
indexSchema.indexSetting bertipe IndexSetting dan berisi parameter berikut.
|
Name |
Type |
Description |
|
routingFields (optional) |
|
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) |
|
Pengurut awal. |
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) |
|
Urutan pengurutan kunci primer. Nilai yang valid: |
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) |
|
Bidang yang digunakan untuk pengurutan awal. |
|
order (optional) |
|
Urutan pengurutan bidang. Nilai yang valid: |
|
mode (optional) |
|
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);