Anda dapat menggunakan metode CreateSearchIndex untuk membuat satu atau beberapa indeks pencarian pada tabel data. Saat membuat indeks pencarian, tambahkan bidang yang ingin dikueri ke dalam indeks tersebut. Anda juga dapat mengonfigurasi opsi lanjutan, seperti bidang routing dan pre-sorting.
Prasyarat
-
Client Tablestore telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi client Tablestore.
-
Tabel data telah dibuat dan memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Buat tabel data.
-
Jumlah maksimum versi diatur ke 1.
-
Masa hidup data (TTL) diatur ke -1, atau operasi UpdateRow dinonaktifkan untuk tabel data tersebut.
-
Catatan penggunaan
-
Tipe data bidang dalam indeks pencarian harus sesuai dengan tipe data bidang dalam tabel data.
-
Untuk mengatur TTL indeks pencarian ke nilai selain -1, nonaktifkan operasi UpdateRow untuk tabel data. TTL indeks pencarian harus kurang dari atau sama dengan TTL tabel data. Untuk informasi selengkapnya, lihat Manajemen siklus hidup.
Parameter
Untuk membuat indeks pencarian, tentukan nama tabel (tableName), nama indeks (indexName), dan skema indeks (schema). Skema mencakup skema bidang (fieldSchemas), pengaturan indeks (indexSetting), dan pengaturan pre-sorting indeks (indexSort).
|
Parameter |
Deskripsi |
|
tableName |
Nama tabel data. |
|
indexName |
Nama indeks pencarian. |
|
fieldSchemas |
Daftar skema bidang. Setiap skema bidang 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, Anda hanya perlu mengatur satu bidang. Jika Anda mengatur beberapa kunci routing, sistem akan menggabungkan nilai-nilai kunci routing tersebut menjadi satu nilai tunggal. Saat penulisan data indeks, sistem mendistribusikan data indeks berdasarkan nilai bidang routing. Data dengan nilai bidang routing yang sama disimpan dalam partisi data yang sama. |
|
indexSort |
Pengaturan pre-sorting indeks, yang mencakup pengaturan sorters. Jika tidak diatur, data diurutkan berdasarkan kunci primer secara default. Catatan
Indeks yang berisi bidang Nested tidak mendukung indexSort. Tidak ada pre-sorting yang dilakukan. sorters (wajib): Metode pre-sorting untuk indeks. Mendukung pengurutan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya, lihat Pengurutan dan paging.
|
|
timeToLive |
Opsional. Waktu hidup (TTL) data, yaitu periode retensi data. Satuan: detik. Nilai default: -1, yang berarti data tidak pernah kedaluwarsa. Nilai TTL minimum adalah 86.400 detik (satu hari). Ketika periode retensi data melebihi TTL, data yang kedaluwarsa akan dibersihkan secara otomatis. |
Contoh
Buat indeks pencarian dan atur pemisah kata
Contoh berikut membuat indeks pencarian dengan kolom-kolom berikut: pic_id (Keyword), count (Long), time_stamp (Long), pic_description (Text), col_vector (Vector), pos (Geo-point), pic_tag (Nested), date (Date), analyzer_single_word (Text), analyzer_split (Text), dan analyzer_fuzzy (Text). Kolom pic_tag memiliki dua sub-bidang: sub_tag_name (Keyword) dan tag_name (Keyword). Kolom analyzer_single_word menggunakan tokenisasi kata tunggal, analyzer_split menggunakan tokenisasi dengan pembatas, dan analyzer_fuzzy menggunakan tokenisasi fuzzy.
client.createSearchIndex({
tableName: "<TABLE_NAME>", // Set the table name.
indexName: "<INDEX_NAME>", // Set the search index name.
schema: {
fieldSchemas: [
{
fieldName: "pic_id",
fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
index: true, // Enable indexing.
enableSortAndAgg: true, // Enable sorting and aggregation.
isAnArray: false
},
{
fieldName: "count",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
isAnArray: false
},
{
fieldName: "time_stamp",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: false,
isAnArray: false,
},
{
fieldName: "pic_description",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
isAnArray: false,
},
{
fieldName: "col_vector",
fieldType: TableStore.FieldType.VECTOR,
index: true,
isAnArray: false,
vectorOptions: {
dataType: TableStore.VectorDataType.VD_FLOAT_32,
dimension: 4,
metricType: TableStore.VectorMetricType.VM_COSINE,
}
},
{
fieldName: "pos",
fieldType: TableStore.FieldType.GEO_POINT,
index: true,
enableSortAndAgg: true,
isAnArray: false,
},
{
fieldName: "pic_tag",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
fieldSchemas: [
{
fieldName: "sub_tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
}
]
},
{
fieldName: "date",
fieldType: TableStore.FieldType.DATE,
index: true,
enableSortAndAgg: true,
isAnArray: false,
dateFormats: ["yyyy-MM-dd'T'HH:mm:ss.SSSSSS"],
},
{
fieldName: "analyzer_single_word",
fieldType: TableStore.FieldType.TEXT,
analyzer: "single_word",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
caseSensitive: true,
delimitWord: false,
}
},
{
fieldName: "analyzer_split",
fieldType: TableStore.FieldType.TEXT,
analyzer: "split",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
delimiter: ",",
}
},
{
fieldName: "analyzer_fuzzy",
fieldType: TableStore.FieldType.TEXT,
analyzer: "fuzzy",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
minChars: 1,
maxChars: 5,
}
},
],
indexSetting: { // The configuration options of the index.
"routingFields": ["count", "pic_id"], // Only primary key columns can be set as routing fields.
"routingPartitionSize": null
},
//indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
//sorters: [
// { // If you do not set indexSort, the data is sorted by primary key in ascending order by default.
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
//{
// fieldSort: {
// fieldName: "Col_Keyword",
// order: TableStore.SortOrder.SORT_ORDER_DESC // Set the sorting order for indexSort.
// }
//}
//]
//},
timeToLive: 1000000, // Unit: seconds.
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});
Buat indeks pencarian dan aktifkan penyorotan
Contoh berikut membuat indeks pencarian dengan penyorotan diaktifkan. Indeks tersebut memiliki tiga bidang: k (Keyword), t (Text), dan n (Nested). Bidang n memiliki tiga sub-bidang: nk (Keyword), nl (Long), dan nt (Text). Penyorotan diaktifkan untuk bidang t dan sub-bidang nt.
client.createSearchIndex({
tableName: "<TABLE_NAME>", // Set the table name.
indexName: "<SEARCH_INDEX_NAME>", // Set the search index name.
schema: {
fieldSchemas: [
{
fieldName: "k",
fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
index: true, // Enable indexing.
enableSortAndAgg: true, // Enable sorting and aggregation.
isAnArray: false
},
{
fieldName: "t",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // Enable highlighting for the field.
isAnArray: false,
},
{
fieldName: "n",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
fieldSchemas: [
{
fieldName: "nk",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "nl",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "nt",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // Enable highlighting for the field.
},
]
},
],
indexSetting: { // The configuration options of the index.
"routingFields": ["id"], // Only primary key columns can be set as routing fields.
"routingPartitionSize": null
},
//indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
//sorters: [
// { // If you do not set indexSort, the data is sorted by primary key in ascending order by default.
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
//{
// fieldSort: {
// fieldName: "Col_Keyword",
// order: TableStore.SortOrder.SORT_ORDER_DESC // Set the sorting order for indexSort.
// }
//}
//]
//},
timeToLive: 1000000, // Unit: seconds.
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});
FAQ
-
Perbedaan antara kueri rentang menggunakan operasi GetRange dan Search
-
Apakah Tablestore mendukung penyimpanan data berformat JSON?
-
Data tidak dapat ditemukan menggunakan operasi Search dari indeks pencarian
-
Apakah Tablestore mendukung kueri yang mirip dengan IN dan BETWEEN...AND dalam database relasional?
-
Terjadi error "field:xx must enable enable_sort_and_agg" saat menggunakan indeks pencarian
Referensi
-
Setelah membuat indeks pencarian, pilih jenis kueri untuk kueri data multidimensi. Jenis kueri yang didukung meliputi kueri tepat, kueri istilah, Pencocokan semua kueri, kueri cocok, permintaan pencocokan frasa, kueri awalan, kueri rentang, kueri wildcard, kueri geografis, Boolean query, Pencarian vektor, kueri bersarang, dan kueri exists.
-
Saat mengkueri data, terapkan operasi pengurutan dan paging, penyorotan, atau collapse (deduplikasi) pada set hasil.
-
Setelah membuat indeks pencarian, kelola sesuai kebutuhan. Operasi termasuk memodifikasi skema secara dinamis, memperbarui konfigurasi indeks pencarian, 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, gunakan fitur agregasi statistik atau fitur kueri SQL.
-
Untuk mengekspor data dengan cepat tanpa memerlukan urutan tertentu, gunakan fitur Pemindaian paralel.