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:
|
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.
|
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
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
Differences between range queries using the GetRange and Search operations
Data cannot be found using the Search operation of a search index
Does Tablestore support queries similar to IN and BETWEEN...AND in relational databases?
The "field:xx must enable enable_sort_and_agg" error occurs when you use a search index
Referensi
Setelah membuat indeks pencarian, Anda dapat memilih jenis kueri yang sesuai untuk melakukan kueri data multidimensi. Jenis kueri indeks pencarian meliputi Term query, Terms query, Match all query, Match query, Match phrase query, Prefix query, Suffix query, Range query, Wildcard query, Geo-query, Boolean query, Vector search, Nested query, dan Exists query.
Saat mengkueri data, Anda dapat melakukan operasi sorting dan pagination, highlighting, atau collapse (deduplikasi) pada set hasil.
Setelah membuat indeks pencarian, Anda dapat mengelolanya sesuai kebutuhan. Operasi pengelolaan meliputi modifikasi skema secara dinamis, manajemen siklus hidup, menampilkan daftar indeks pencarian, mengkueri deskripsi indeks pencarian, dan menghapus indeks pencarian.
Untuk melakukan analitik data, seperti mencari nilai maksimum atau minimum, menghitung jumlah, atau menghitung jumlah baris, Anda dapat menggunakan fitur agregasi atau fitur SQL query.
Untuk mengekspor data secara cepat tanpa mempertahankan urutan seluruh set hasil, Anda dapat menggunakan fitur parallel scan.