Jika Anda ingin menjalankan kueri berdasarkan kolom non-primary key atau kueri Boolean selama operasi bisnis, Anda dapat membuat indeks pencarian untuk tabel data di konsol Tablestore, lalu gunakan indeks tersebut untuk mengkueri dan menganalisis data.
Prasyarat
Tabel data telah dibuat. Parameter Max Versions dari tabel disetel ke 1. Parameter Time to Live (TTL) dari tabel memenuhi salah satu kondisi berikut. Untuk informasi lebih lanjut, lihat Operasi pada tabel data.
Waktu hidup (TTL) dari tabel disetel ke -1, yang menunjukkan bahwa data dalam tabel tidak pernah kedaluwarsa.
TTL dari tabel disetel ke nilai selain -1, dan parameter Allow Updates disetel ke No, yang menunjukkan bahwa operasi pembaruan dinonaktifkan pada tabel data.
Klien telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.
Gunakan Tablestore SDK
Anda dapat menggunakan Tablestore SDK berikut untuk mulai menggunakan model TimeSeries. Dalam contoh ini, Tablestore SDK for Java digunakan untuk menjelaskan cara menggunakan indeks pencarian.
Tablestore SDK for Java: Indeks Pencarian
Tablestore SDK for Go: Indeks Pencarian
Tablestore SDK for Python: Indeks Pencarian
Tablestore SDK for Node.js: Indeks Pencarian
Tablestore SDK for .NET: Indeks Pencarian
Tablestore SDK for PHP: Indeks Pencarian
Langkah 1: Buat indeks pencarian
Anda dapat membuat indeks pencarian untuk mempercepat kueri data. Saat membuat indeks pencarian, tambahkan bidang yang datanya ingin Anda kueri ke indeks tersebut. Anda juga dapat mengonfigurasi pengaturan lanjutan seperti TTL dan pra-pengurutan untuk indeks pencarian.
Buat indeks pencarian menggunakan pengaturan default
Contoh kode berikut menunjukkan cara membuat indeks pencarian menggunakan konfigurasi default. Dalam contoh ini, indeks pencarian mencakup bidang berikut: Col_Keyword bertipe Keyword, Col_Long bertipe Long, dan Col_Vector bertipe Vector. Data dalam indeks diurutkan berdasarkan primary key tabel dan tidak pernah kedaluwarsa.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Tentukan nama tabel data.
request.setTableName("<TABLE_NAME>");
// Tentukan nama indeks pencarian.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Tentukan nama dan tipe bidang.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG),
// Tentukan tipe vektor.
new FieldSchema("Col_Vector", FieldType.VECTOR).setIndex(true)
// Set jumlah dimensi menjadi 4 dan algoritma pengukuran jarak untuk vektor menjadi algoritma dot product.
.setVectorOptions(new VectorOptions(VectorDataType.FLOAT_32, 4, VectorMetricType.DOT_PRODUCT))
));
request.setIndexSchema(indexSchema);
// Panggil klien untuk membuat indeks pencarian.
client.createSearchIndex(request);
}Konfigurasikan pengaturan pra-pengurutan saat membuat indeks pencarian
Contoh kode berikut menunjukkan cara membuat indeks pencarian dengan parameter indexSort ditentukan. Dalam contoh ini, indeks pencarian mencakup bidang berikut: Col_Keyword bertipe Keyword, Col_Long bertipe Long, Col_Text bertipe Text, dan Timestamp bertipe Long. Data dalam indeks diurutkan berdasarkan bidang Timestamp.
private static void createSearchIndexWithIndexSort(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Tentukan nama tabel data.
request.setTableName("<TABLE_NAME>");
// Tentukan nama indeks pencarian.
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)));
// Pra-urutkan data berdasarkan bidang Timestamp.
indexSchema.setIndexSort(new Sort(
Arrays.<Sort.Sorter>asList(new FieldSort("Timestamp", SortOrder.ASC))));
request.setIndexSchema(indexSchema);
// Panggil klien untuk membuat indeks pencarian.
client.createSearchIndex(request);
}Tentukan TTL saat membuat indeks pencarian
Fitur TTL dari indeks pencarian saling eksklusif dengan operasi UpdateRow pada tabel tempat indeks pencarian dibuat. Sebelum menentukan TTL indeks pencarian, pastikan bahwa parameter Allow Updates disetel ke No untuk tabel tersebut.
Contoh kode berikut menunjukkan cara membuat indeks pencarian dengan TTL ditentukan. Dalam contoh ini, indeks pencarian mencakup bidang berikut: Col_Keyword bertipe Keyword dan Col_Long bertipe Long. TTL indeks pencarian adalah tujuh hari.
// Gunakan Tablestore SDK for Java V5.12.0 atau yang lebih baru untuk membuat indeks pencarian.
public static void createIndexWithTTL(SyncClient client) {
int days = 7;
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Tentukan nama tabel data.
request.setTableName("<TABLE_NAME>");
// Tentukan nama indeks pencarian.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Tentukan nama dan tipe bidang.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG)));
request.setIndexSchema(indexSchema);
// Tentukan TTL untuk indeks pencarian.
request.setTimeToLiveInDays(days);
// Panggil klien untuk membuat indeks pencarian.
client.createSearchIndex(request);
}Langkah 2: Gunakan indeks pencarian untuk mengkueri data
Indeks pencarian mendukung jenis kueri berikut menggunakan Tablestore SDK: kueri cocok semua, kueri tepat, kueri rentang, kueri awalan, kueri cocok, kueri wildcard, kueri frasa cocok, kueri ada, kueri multi-kata, kueri Boolean, kueri geo pada bidang geo, dan kueri bersarang pada bidang bersarang. Kueri geo diklasifikasikan menjadi jenis berikut: kueri geo-jarak, kueri kotak pembatas geo, dan kueri poligon geo.
Jenis kueri | Kueri | Deskripsi |
Kueri cocok semua | Kueri ini digunakan untuk mengkueri jumlah total baris dalam tabel data atau secara acak mengambil beberapa baris dari tabel data. | |
Kueri tepat | Kueri ini menggunakan pencocokan penuh dan tepat untuk mengambil data dari tabel data. Kueri tepat mirip dengan kueri berdasarkan string tertentu. Jika kolom bertipe TEXT diperiksa dan salah satu token dalam baris persis cocok dengan kata kunci yang ditentukan, baris tersebut memenuhi kondisi kueri. | |
Kueri rentang | Kueri ini mengambil data dalam rentang yang ditentukan dari tabel data. Jika kolom bertipe TEXT diperiksa dan salah satu token dalam baris berada dalam rentang yang ditentukan, baris tersebut memenuhi kondisi kueri. | |
Kueri awalan | Kueri ini mengambil data yang berisi awalan yang ditentukan dari tabel data. Jika kolom bertipe TEXT diperiksa dan salah satu token dalam baris berisi awalan yang ditentukan, baris tersebut memenuhi kondisi kueri. | |
Kueri cocok | Kueri ini menggunakan pencocokan perkiraan untuk mengambil data dari tabel data. Kata kunci yang Anda gunakan untuk kueri cocok dan nilai kolom di-tokenisasi berdasarkan analyzer yang Anda tentukan. Kemudian, kueri cocok dilakukan berdasarkan token. Operator logika OR digunakan untuk menghubungkan token. Jika jumlah token dalam baris yang cocok dengan token dalam kata kunci yang di-tokenisasi mencapai nilai minimum yang Anda tentukan, baris tersebut memenuhi kondisi kueri. | |
Kueri wildcard | Kueri ini mengambil data dari tabel data jika data cocok dengan string yang berisi satu atau lebih karakter wildcard. Anda dapat menggunakan karakter wildcard asterisk (*) dan tanda tanya (?) dalam string. Asterisk (*) cocok dengan string dengan panjang apa pun di, sebelum, atau setelah istilah yang ingin Anda kueri. Tanda tanya (?) cocok dengan satu karakter dalam posisi tertentu. | |
Kueri frasa cocok | Kueri ini mirip dengan kueri cocok. Baris memenuhi kondisi kueri hanya ketika urutan dan posisi token dalam baris cocok dengan urutan dan posisi token yang terkandung dalam kata kunci yang di-tokenisasi. | |
Kueri ada | Kueri ini juga disebut kueri NULL atau kueri nilai NULL. Kueri ini digunakan untuk data jarang untuk menentukan apakah kolom dari suatu baris ada. Misalnya, Anda dapat mengkueri baris di mana nilai kolom alamat tidak kosong. Jika kolom tidak ada dalam baris atau nilai kolom adalah array kosong ("[]"), kolom tersebut tidak ada dalam baris. | |
Kueri multi-kata | Kueri ini mirip dengan kueri tepat kecuali Anda dapat menentukan beberapa kata kunci pada saat yang sama. Jika salah satu token dalam baris cocok dengan salah satu kata kunci, baris tersebut memenuhi kondisi kueri. | |
Kueri Boolean | Kueri ini mengambil data berdasarkan satu atau lebih subkueri. Tablestore mengembalikan baris yang memenuhi kondisi subkueri. Kondisi subkueri dapat digabungkan menggunakan operator logika, seperti AND, NOT, dan OR. | |
Kueri geo-jarak | Anda dapat menentukan area geografis melingkar yang terdiri dari titik pusat dan radius sebagai kondisi kueri. Tablestore mengembalikan baris di mana nilai kolom yang ditentukan berada dalam area geografis melingkar. | |
Kueri kotak pembatas geo | Anda dapat menentukan area geografis persegi panjang sebagai kondisi kueri. Tablestore mengembalikan baris di mana nilai kolom yang ditentukan berada dalam area geografis persegi panjang. | |
Kueri poligon geo | Anda dapat menentukan area geografis poligon sebagai kondisi kueri. Tablestore mengembalikan baris di mana nilai kolom yang ditentukan berada dalam area geografis poligon. | |
Kueri bersarang | Kueri ini mengambil data dari bidang bersarang. |
Langkah 3: Gunakan indeks pencarian untuk menganalisis data
Untuk menganalisis data dalam tabel, Anda dapat memanggil operasi Search untuk menggunakan fitur agregasi. Misalnya, Anda dapat menggunakan fitur agregasi untuk mengkueri nilai maksimum, jumlah nilai, dan jumlah baris, serta mengelompokkan data berdasarkan nilai bidang. Untuk informasi lebih lanjut, lihat Agregasi.
Langkah 4: Gunakan indeks pencarian untuk mengekspor data
Jika Anda ingin mendapatkan semua baris yang memenuhi kondisi kueri tanpa mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian paralel.
Lampiran: Kelola indeks pencarian
Berikut ini menjelaskan operasi yang dapat Anda lakukan pada indeks pencarian yang telah dibuat.
Kueri detail indeks pencarian
Contoh kode berikut menunjukkan cara mengkueri detail indeks pencarian, seperti waktu hidup (TTL), waktu pembuatan, status sinkronisasi, dan informasi bidang:
private static DescribeSearchIndexResponse describeSearchIndex(SyncClient client) {
DescribeSearchIndexRequest request = new DescribeSearchIndexRequest();
// Tentukan nama tabel data.
request.setTableName("<TABLE_NAME>");
// Tentukan nama indeks pencarian.
request.setIndexName("<INDEX_NAME>");
DescribeSearchIndexResponse response = client.describeSearchIndex(request);
// Tampilkan detail respons.
System.out.println(response.jsonize());
// Tampilkan status sinkronisasi data dalam indeks pencarian.
System.out.println(response.getSyncStat().getSyncPhase().name());
return response;
}Kueri daftar indeks pencarian
Contoh kode berikut menunjukkan cara mencantumkan indeks pencarian yang dibuat untuk tabel:
private static List<SearchIndexInfo> listSearchIndex(SyncClient client) {
ListSearchIndexRequest request = new ListSearchIndexRequest();
// Tentukan nama tabel data.
request.setTableName("<TABLE_NAME>");
// Kueri semua indeks pencarian yang dibuat untuk tabel data.
return client.listSearchIndex(request).getIndexInfos();
}Ubah TTL indeks pencarian
Hapus indeks pencarian
public static void deleteSearchIndexExample(SyncClient client) {
DeleteSearchIndexRequest request = new DeleteSearchIndexRequest();
// Tentukan nama tabel data.
request.setTableName("test_table");
// Tentukan nama indeks pencarian yang ingin Anda hapus.
request.setIndexName("index_name");
// Hapus indeks pencarian.
client.deleteSearchIndex(request);
}FAQ
Referensi
Anda juga dapat menggunakan indeks pencarian di konsol Tablestore atau CLI Tablestore. Untuk informasi lebih lanjut, lihat Memulai cepat atau Gunakan CLI Tablestore.
Jika Anda memanggil operasi Search untuk mengkueri data, Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri menggunakan fitur pengurutan dan paging. Untuk informasi lebih lanjut, lihat Pengurutan dan paging.
Jika Anda memanggil operasi Search untuk mengkueri data, Anda dapat menggunakan fitur collapse (distinct) untuk merangkum set hasil berdasarkan kolom tertentu. Dengan cara ini, data tipe tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika Anda ingin melakukan pencarian teks lengkap, Anda harus menokenisasi bidang tempat tokenisasi dapat dilakukan dan memilih metode kueri yang sesuai untuk mengkueri data. Untuk informasi lebih lanjut, lihat Tokenisasi.
Jika Anda ingin menyimpan dan mengkueri data dalam beberapa hubungan logis, Anda dapat menyimpan data sebagai bidang bersarang dan melakukan kueri bersarang untuk mengkueri data. Untuk informasi lebih lanjut, lihat Tipe bidang ARRAY dan Bersarang dan Kueri bersarang.
Jika Anda ingin sistem secara otomatis menghapus data yang disimpan dalam indeks pencarian selama periode waktu yang melebihi durasi tertentu, Anda dapat menentukan TTL indeks pencarian. Untuk informasi lebih lanjut, lihat Tentukan TTL indeks pencarian.
Jika Anda ingin menambahkan kolom terindeks ke, memperbarui kolom terindeks dalam, atau menghapus kolom terindeks dari indeks pencarian, Anda dapat memodifikasi skema indeks pencarian secara dinamis. Untuk informasi lebih lanjut, lihat Modifikasi skema secara dinamis.