All Products
Search
Document Center

Tablestore:Nested query

Last Updated:May 01, 2026

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

Parameter

Parameter

Deskripsi

tableName

Nama tabel data.

indexName

Nama indeks pencarian.

path

Path bidang nested. Contohnya, news.title merujuk pada sub-bidang title di dalam bidang nested news.

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:

  • sort: Urutan pengurutan untuk mengembalikan sub-baris nested.

  • offset: Posisi awal ketika bidang nested berisi beberapa sub-baris.

  • limit: Jumlah maksimum sub-baris yang dikembalikan ketika bidang nested berisi beberapa sub-baris. Nilai default: 3.

  • highlight: Pengaturan penyorotan (highlight) untuk sub-bidang nested. Untuk detailnya, lihat Summary and highlight.

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.