Ketika melakukan kueri data, Anda dapat mengatur parameter highlighting untuk menampilkan snippet teks yang mengandung kueri pencarian dan meng-highlight kueri tersebut. Fitur highlighting hanya didukung untuk field bertipe text.
Prasyarat
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi instans OTSClient.
Tabel data telah dibuat dan data telah ditulis ke tabel. Untuk informasi selengkapnya, lihat Buat tabel data dan Tulis data.
Search index telah dibuat untuk tabel data. Untuk informasi selengkapnya, lihat Buat search index.
Catatan penggunaan
Fitur highlighting didukung di Tablestore SDK untuk Node.js V5.5.0 dan versi yang lebih baru. Sebelum menggunakan fitur highlighting, pastikan Anda menggunakan Tablestore SDK untuk Node.js V5.5.0 atau versi yang lebih baru. Untuk informasi selengkapnya tentang riwayat versi Tablestore SDK untuk Node.js, lihat Riwayat versi Tablestore SDK untuk Node.js.
Jika Anda mengaktifkan fitur highlighting pada match query atau match phrase query, string kueri dalam hasil kueri dapat di-highlight menggunakan beberapa opening tag (preTag) dan closing tag (postTag).
Jika metode tokenisasi field text merupakan tokenisasi berbasis unit semantik maksimum (MaxWord), fitur highlighting tidak didukung ketika Anda melakukan match phrase query pada field text.
Jika Anda ingin menampilkan beberapa fragment, string kueri dalam fragment dapat terpisah. Dalam hal ini, string kueri mungkin tidak di-highlight.
Parameter
Parameter | Deskripsi | |
highlightEncoder | Metode encoding untuk fragment teks yang di-highlight. Nilai valid:
| |
fieldHighlightParams | Pengaturan highlighting untuk field. Anda hanya dapat mengonfigurasi parameter ini untuk field yang berisi string kueri yang ditentukan dalam objek SearchQuery. | |
HighlightParameter | numberOfFragments | Jumlah maksimum fragment teks yang di-highlight yang ingin Anda tampilkan. Sebaiknya atur parameter ini menjadi 1. |
fragmentSize | Panjang setiap fragment teks yang ingin Anda tampilkan. Nilai default: 100. Penting Panjang asli fragment teks yang ditampilkan mungkin berbeda dengan nilai parameter ini. | |
preTag | Opening tag yang ingin Anda gunakan untuk meng-highlight string kueri. Contoh: | |
postTag | Closing tag yang ingin Anda gunakan untuk meng-highlight string kueri. Contoh: | |
highlightFragmentOrder | Aturan sorting untuk fragment teks yang di-highlight yang ingin Anda tampilkan.
| |
Contoh
Contoh berikut menunjukkan cara menggunakan MatchQuery untuk menemukan data di mana kolom Col_Text sama dengan hangzhou shanghai dan cara meng-highlight kueri pencarian dalam hasil. Kolom Col_Text bertipe Text.
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // Untuk hanya mengambil jumlah row tanpa data spesifik, atur limit menjadi 0.
query: { // Atur query type menjadi MatchQuery.
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Text", // Tentukan field yang ingin Anda cocokkan.
text: "hangzhou shanghai" // Tentukan string kueri yang ingin Anda cocokkan.
}
},
highlight:{
highlightEncoder:TableStore.HighlightEncoder.PLAIN_MODE,
highlightParameters:[
{
fieldName:"Col_Text",
preTag: "",
postTag: "",
fragmentsOrder: TableStore.HighlightFragmentOrder.TEXT_SEQUENCE,
fragmentSize: 20,
numberOfFragments: 3,
}
],
},
getTotalCount: true // Tentukan apakah akan menampilkan total jumlah row yang memenuhi kondisi kueri. Nilai default: false.
},
columnToGet: { // Tentukan kolom yang ingin Anda tampilkan. Anda dapat mengatur parameter menjadi RETURN_SPECIFIED untuk menampilkan kolom tertentu, RETURN_ALL untuk menampilkan semua kolom, RETURN_ALL_FROM_INDEX untuk menampilkan semua kolom dari search index, atau RETURN_NONE untuk hanya menampilkan kolom primary key.
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data.rows, null, 2));
printSearchHit(data.searchHits, "");
});
/**
* Menampilkan konten yang memenuhi kondisi kueri.
* @param searchHits searchHits
* Jika output menggunakan @param prefix struktur Nested, tambahkan prefix untuk menampilkan informasi hierarki.
*/
function printSearchHit(searchHits, prefix) {
TableStore.util.arrayEach(searchHits, function (searchHit) {
if (searchHit.highlightResultItem != null) {
console.log(prefix + "Highlight: \n");
var strBuilder = ""
for (const [key,val] of searchHit.highlightResultItem.highlightFields.entries()) {
strBuilder += key + ":[";
strBuilder += val.fragments.join(",") + "]\n";
console.log(strBuilder);
}
}
for (const [key,val] of searchHit.searchInnerHits.entries()) {
console.log(prefix + "Path: " + key + "\n");
console.log(prefix + "InnerHit: \n");
printSearchHit(val.subSearchHits, prefix + " ");
}
});
}Referensi
Untuk informasi tentang fitur highlighting, lihat Highlighting.
Untuk informasi tentang cara menggunakan fitur highlighting ketika melakukan kueri nested field, lihat Nested query.