Buat satu atau beberapa indeks pencarian untuk tabel data menggunakan metode CreateSearchIndex. Saat membuat indeks pencarian, tentukan bidang-bidang yang akan dikueri dan, secara opsional, konfigurasikan opsi lanjutan seperti kunci routing kustom dan pengurutan awal.
Prasyarat
Sebelum memulai, pastikan bahwa:
Klien Tablestore telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize the Tablestore Client.
-
Tabel data telah dibuat dan memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Create a data table.
Jumlah maksimum versi diatur ke 1.
Waktu hidup (TTL) diatur ke -1, atau pembaruan pada tabel data dinonaktifkan.
Kompatibilitas tipe bidang
Tipe data setiap bidang dalam indeks pencarian harus sesuai dengan tipe data bidang yang bersesuaian di tabel data.
Parameter
Untuk membuat indeks pencarian, tentukan nama tabel (TableName), nama indeks pencarian (IndexName), dan skema indeks (IndexSchema). IndexSchema mencakup FieldSchemas (pengaturan bidang), IndexSetting (pengaturan indeks), dan IndexSort (pengaturan pengurutan awal).
|
Parameter |
Deskripsi |
|
TableName |
Nama tabel data. |
|
IndexName |
Nama indeks pencarian. |
|
FieldSchemas |
Daftar objek FieldSchema. Setiap objek FieldSchema berisi parameter berikut:
|
|
IndexSetting |
Pengaturan indeks. Berisi parameter berikut: RoutingFields (Opsional): Bidang routing kustom. Pilih satu atau beberapa kolom kunci primer sebagai bidang routing. Dalam kebanyakan kasus, satu bidang routing sudah cukup—jika Anda menetapkan beberapa kunci routing, sistem akan menggabungkan nilainya menjadi satu nilai tunggal. Data dengan nilai bidang routing yang sama akan diindeks ke partisi data yang sama. |
|
IndexSort |
Pengaturan pengurutan awal untuk indeks. Jika tidak ditentukan, data diurutkan berdasarkan kunci primer secara default. Indeks yang berisi bidang Nested tidak mendukung IndexSort. Sorters (Wajib): Metode pengurutan awal. Mendukung pengurutan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya, lihat Sorting and pagination.
|
|
TimeToLive |
Opsional. Waktu hidup (TTL) data dalam indeks pencarian, dalam satuan detik. Default: -1 (data tidak pernah kedaluwarsa). Nilai minimum: 86400 detik (satu hari). Data yang kedaluwarsa akan dibersihkan secara otomatis ketika periode retensi melebihi TTL yang dikonfigurasi. |
Contoh
Buat indeks pencarian dengan konfigurasi default
Buat indeks pencarian dengan tiga bidang: Keyword_type_col (Keyword), Long_type_col (Long), dan Text_type_col (Text), dengan pengurutan dan agregasi diaktifkan pada bidang Keyword dan Long.
/// <summary>
/// Membuat indeks pencarian dengan tiga kolom atribut: Keyword_type_col, Long_type_col, dan Text_type_col.
/// Tipe bidang: Keyword (string tidak ditokenisasi), Long (integer), dan Text (string ditokenisasi).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
// Tetapkan nama tabel dan nama indeks pencarian.
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
index = true, // Aktifkan pengindeksan.
EnableSortAndAgg = true // Aktifkan pengurutan dan agregasi.
},
new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
};
request.IndexSchame = new IndexSchema()
{
FieldSchemas = FieldSchemas
};
// Buat indeks pencarian.
CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
Console.WriteLine("Searchindex is created: " + IndexName);
}
Buat indeks pencarian dan tentukan IndexSort
Buat indeks pencarian dengan tiga bidang: Keyword_type_col (Keyword), Long_type_col (Long), dan Text_type_col (Text). Hasil diurutkan sebelumnya berdasarkan bidang Long_type_col dalam urutan menaik.
/// <summary>
/// Membuat indeks pencarian dengan tiga kolom atribut: Keyword_type_col, Long_type_col, dan Text_type_col.
/// Tipe bidang: Keyword (string tidak ditokenisasi), Long (integer), dan Text (string ditokenisasi).
/// Mengurutkan hasil sebelumnya berdasarkan Long_type_col dalam urutan menaik.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
// Tetapkan nama tabel dan nama indeks pencarian.
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
index = true,
EnableSortAndAgg = true
},
new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
};
request.IndexSchame = new IndexSchema()
{
FieldSchemas = FieldSchemas,
// Urutkan sebelumnya berdasarkan Long_type_col (menaik). Bidang harus memiliki EnableSortAndAgg diaktifkan.
IndexSort = new DataModel.Search.Sort.Sort()
{
Sorters = new List<DataModel.Search.Sort.ISorter>
{
new DataModel.Search.Sort.FieldSort(Long_type_col, DataModel.Search.Sort.SortOrder.ASC)
}
}
};
CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
Console.WriteLine("Searchindex is created: " + IndexName);
}
Buat indeks pencarian yang berisi kolom tanggal dan kolom virtual
Buat indeks pencarian dengan lima bidang: pk0 (Keyword), pk1 (Long), date_col (Date), geo_col (Geo-point), dan col0_v1 (Text). Kolom virtual col0_v1 dipetakan ke kolom sumber col0. Hasil diurutkan sebelumnya berdasarkan pk1 dalam urutan menaik.
/// <summary>
/// Membuat indeks pencarian yang mencakup bidang Date dan kolom virtual.
/// Kolom virtual col0_v1 dipetakan ke kolom sumber col0 di tabel data.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
List<FieldSchema> fieldSchemas = new List<FieldSchema> {
new FieldSchema("pk0", FieldType.KEYWORD)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("pk1", FieldType.LONG)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("date_col", FieldType.DATE)
{
index = true,
DateFormats = new List<string>(){
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSS"
}
},
new FieldSchema("geo_col", FieldType.GEO_POINT)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("col0_v1", FieldType.TEXT)
{
index = true,
Analyzer = Analyzer.Split,
AnalyzerParameter = new SingleWordAnalyzerParameter(true, true),
IsVirtualField = true,
SourceFieldNames = new List<string> { "col0" } // Dipetakan ke kolom sumber col0.
},
};
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
request.IndexSchame = new IndexSchema()
{
FieldSchemas = fieldSchemas,
IndexSort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.ASC) })
};
request.TimeToLive = -1; // Data tidak pernah kedaluwarsa.
otsClient.CreateSearchIndex(request);
}
FAQ
Lanjutan
Kueri indeks pencarian menggunakan berbagai jenis kueri untuk analisis data multidimensi, termasuk term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, Boolean query, nested query, dan exists query.
Terapkan sorting and pagination atau collapse (deduplikasi) pada hasil kueri.
Mengelola indeks pencarian melalui modifikasi skema secara dinamis, penampilan daftar indeks pencarian, pengkuerian deskripsi indeks pencarian, dan penghapusan indeks pencarian.
Untuk analitik seperti mencari nilai maksimum atau minimum, menghitung jumlah, atau menghitung baris, gunakan fitur statistical aggregation atau SQL query.
Untuk mengekspor data dengan cepat tanpa memerlukan urutan hasil tertentu, gunakan fitur parallel scan.