Anda dapat melakukan kueri bersarang untuk menanyakan data di baris anak dari bidang bersarang. Bidang bersarang tidak dapat langsung di-kueri. Untuk menanyakan bidang bersarang, Anda harus menentukan jalur bidang bersarang dan subkueri dalam objek NestedQuery. Subkueri dapat berupa kueri dari jenis apa pun.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Instance OTSClient.
Tabel data dibuat dan data ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat Tabel Data dan Tulis Data.
Indeks pencarian dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat Indeks Pencarian.
Parameter
Parameter | Deskripsi |
tableName | Nama tabel data. |
indexName | Nama indeks pencarian. |
path | Jalur bidang bersarang. Bidang bersarang menggunakan struktur pohon. Sebagai contoh, news.title menentukan subbidang judul dalam bidang bersarang bernama news. |
query | Kueri pada subbidang dalam bidang bersarang. Kueri dapat berupa kueri dari jenis apa pun. |
scoreMode | Nilai yang digunakan untuk menghitung skor jika sebuah bidang berisi beberapa nilai. |
InnerHits | Pengaturan subbidang dari bidang bersarang.
|
Contoh
Kueri bidang bersarang tingkat tunggal
Berikut ini adalah contoh kode sampel tentang cara menanyakan baris di mana nilai Sub_Col_Keyword subbidang dalam bidang bersarang Col_Nested adalah Hangzhou:
/**
* Col_Nested: '[{Sub_Col_Keyword: "Hangzhou"},{Sub_Col_Keyword: "Shanghai"}]'
*/
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // Untuk menanyakan hanya jumlah baris yang memenuhi kondisi kueri tanpa mengembalikan data spesifik, setel parameter limit ke 0.
query: { // Setel tipe kueri ke TableStore.QueryType.NESTED_QUERY.
queryType: TableStore.QueryType.NESTED_QUERY,
query: {
path: "Col_Nested",
query: {
queryType: TableStore.QueryType.TERM_QUERY,
query: {
fieldName: "Col_Nested.Sub_Col_Keyword",
term: "Hangzhou"
}
},
}
},
getTotalCount: true // Tentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default: false.
},
columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat menyetel parameter ini ke RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk mengembalikan hanya kolom kunci utama.
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});Sorot string kueri dalam hasil kueri dari kueri bersarang
Berikut ini adalah contoh kode sampel tentang cara menanyakan baris di mana nilai Sub_Col_Text subbidang dari bidang bersarang bernama Col_Nested cocok dengan tablestore dan sorot string kueri dalam hasil kueri.
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // Untuk menanyakan hanya jumlah baris yang memenuhi kondisi kueri tanpa mengembalikan data spesifik, setel parameter limit ke 0.
query: { // Setel tipe kueri ke TableStore.QueryType.NESTED_QUERY.
queryType: TableStore.QueryType.NESTED_QUERY,
query: {
path: "Col_Nested",
query: {
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Nested.Sub_Col_Text",
text: "tablestore"
}
},
innerHits: {
sort: {
sorters: [
{
scoreSort: {
order: TableStore.SortOrder.SORT_ORDER_DESC
}
},
{
docSort: {
order: TableStore.SortOrder.SORT_ORDER_ASC
}
},
],
},
highlight: {
highlightParameters: [
{
fieldName:"Col_Nested.Sub_Col_Text",
preTag: "",
fragmentsOrder: TableStore.HighlightFragmentOrder.TEXT_SEQUENCE,
fragmentSize: 20,
numberOfFragments: 3,
}
]
}
},
}
},
getTotalCount: true // Tentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default: false.
},
columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat menyetel parameter ini ke RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk mengembalikan hanya kolom kunci utama.
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, "");
});
/**
* Tampilkan konten yang memenuhi kondisi kueri.
* @param searchHits searchHits
* Jika output menggunakan prefix Nested structure, 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 + " ");
}
});
}FAQ
Referensi
Jenis-jenis kueri berikut didukung oleh indeks pencarian: kueri tepat, kueri terms, kueri cocok semua, kueri cocok, kueri frasa cocok, kueri awalan, kueri rentang, kueri wildcard, kueri Boolean, kueri geo, kueri bersarang, kueri vektor, dan kueri eksis. Anda dapat memilih jenis kueri untuk menanyakan data sesuai dengan kebutuhan bisnis Anda.
Jika Anda ingin mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur Pengurutan dan paging. Untuk informasi lebih lanjut, lihat Pengurutan dan Paging.
Jika Anda ingin menciutkan set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). Dengan cara ini, data dari tipe yang ditentukan hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (Distinct).
Jika Anda ingin menganalisis data dalam tabel data, seperti mendapatkan nilai ekstrem, jumlah total, dan jumlah baris keseluruhan, Anda dapat melakukan operasi agregasi atau menjalankan pernyataan SQL. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika Anda ingin dengan cepat mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris tersebut, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian Paralel.