Gunakan NestedQuery untuk mengkueri data dalam sub-baris bidang bersarang (nested field). Tipe nested tidak dapat dikueri secara langsung—bungkus kueri dalam NestedQuery dan tentukan path bidang nested serta subkueri. Subkueri dapat berupa jenis kueri apa pun.
Prasyarat
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize an OTSClient instance.
-
Tabel data telah dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi selengkapnya, lihat Create data tables dan Write data.
-
Indeks pencarian telah dibuat untuk tabel data tersebut. Untuk informasi selengkapnya, lihat Create a search index.
Parameter
|
Parameter |
Deskripsi |
|
tableName |
Nama tabel data. |
|
indexName |
Nama indeks pencarian. |
|
path |
Path bidang nested. Contohnya, |
|
query |
Kueri yang dijalankan terhadap sub-bidang dari bidang nested. Semua jenis kueri didukung. |
|
scoreMode |
Mode skor yang digunakan ketika suatu bidang berisi beberapa nilai. |
|
InnerHits |
Konfigurasi untuk sub-bidang dari bidang nested. Meliputi opsi berikut:
|
Contoh
Contoh kueri nested tingkat tunggal
Kueri baris di mana Col_Nested.Sub_Col_Keyword sama dengan "happy". Col_Nested adalah bidang nested yang sub-barisnya berisi sub-bidang Sub_Col_Keyword.
/**
* Data nested contoh untuk Col_Nested: '[{Sub_Col_Keyword: "happy"},{Sub_Col_Keyword: "sunny"}]'
*/
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // Untuk hanya mendapatkan jumlah baris tanpa mengambil data spesifik, atur limit ke 0. Ini mencegah pengembalian baris apa pun.
query: { // Atur 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: "happy"
}
},
}
},
getTotalCount: true // TotalCount dalam hasil menunjukkan jumlah total baris dalam tabel. Nilai default-nya false, artinya jumlah total tidak dikembalikan.
},
columnToGet: { // Kolom yang akan dikembalikan. Anda dapat mengaturnya ke RETURN_SPECIFIED (mengembalikan kolom kustom), RETURN_ALL (mengembalikan semua kolom), RETURN_ALL_FROM_INDEX (mengembalikan semua kolom dari indeks pencarian), atau RETURN_NONE (tidak mengembalikan kolom apa pun).
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});
Contoh penggunaan summary dan highlight dalam kueri nested
Gunakan NestedQuery untuk menemukan baris di mana sub-bidang Sub_Col_Text dalam bidang nested Col_Nested sesuai dengan tablestore, dan sorot istilah yang cocok dalam hasilnya.
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // Untuk hanya mendapatkan jumlah baris tanpa mengambil data spesifik, atur limit ke 0. Ini mencegah pengembalian baris apa pun.
query: { // Atur 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: "",
postTag: "",
fragmentsOrder: TableStore.HighlightFragmentOrder.TEXT_SEQUENCE,
fragmentSize: 20,
numberOfFragments: 3,
}
]
}
},
}
},
getTotalCount: true // TotalCount dalam hasil menunjukkan jumlah total baris dalam tabel. Nilai default-nya false, artinya jumlah total tidak dikembalikan.
},
columnToGet: { // Kolom yang akan dikembalikan. Anda dapat mengaturnya ke RETURN_SPECIFIED (mengembalikan kolom kustom), RETURN_ALL (mengembalikan semua kolom), RETURN_ALL_FROM_INDEX (mengembalikan semua kolom dari indeks pencarian), atau RETURN_NONE (tidak mengembalikan kolom apa pun).
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, "");
});
/**
* Mencetak konten searchHit.
* @param searchHits Objek searchHits.
* @param prefix Awalan yang ditambahkan untuk struktur nested guna mencetak informasi hierarkis.
*/
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 kueri berikut didukung oleh indeks pencarian: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query, vector query, dan exists query. Anda dapat memilih jenis kueri sesuai kebutuhan bisnis Anda.
Jika Anda ingin mengurutkan atau melakukan paginasi terhadap baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur pengurutan dan paginasi. Untuk informasi selengkapnya, lihat Sorting and 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 selengkapnya, lihat Collapse (distinct).
Jika Anda ingin menganalisis data dalam tabel data, seperti mendapatkan nilai ekstrem, jumlah total, dan jumlah baris, Anda dapat melakukan operasi agregasi atau menjalankan pernyataan SQL. Untuk informasi selengkapnya, lihat Aggregation dan SQL query.
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 selengkapnya, lihat Parallel scan.