All Products
Search
Document Center

Tablestore:Kueri bersarang

Last Updated:Aug 07, 2026

Gunakan Tablestore SDK untuk Python untuk mencocokkan data dalam bidang Nested, sekaligus mempertahankan batas baris anak dan secara opsional mengembalikan baris anak yang cocok.

Prasyarat

Instal Tablestore SDK untuk Python dan inisialisasi klien.

Deskripsi

Kueri bersarang melakukan kueri terhadap baris anak dalam bidang Nested. Setiap baris anak mempertahankan hubungan antar bidangnya. Anda tidak dapat langsung melakukan kueri terhadap bidang anak dan harus membungkus kueri anak dalam NestedQuery. Parameter path menentukan path bidang Nested, dan bidang dalam kueri anak harus menggunakan path lengkap. Kueri anak dapat berupa tipe Query apa pun. Jika beberapa kondisi harus dipenuhi oleh baris anak yang sama, gunakan BoolQuery yang berisi kondisi-kondisi tersebut sebagai kueri anak dari satu NestedQuery. Jika baris anak yang berbeda dapat memenuhi kondisi yang berbeda, buat satu NestedQuery untuk setiap kondisi dan gabungkan dengan BoolQuery luar.

NestedQuery(path, query, score_mode=ScoreMode.NONE, inner_hits=None, weight=None)

Contoh berikut melakukan kueri terhadap baris di mana baris anak yang sama dari bidang items memiliki items.name sama dengan alice dan items.age kurang dari 40.

child_query = BoolQuery(
    must_queries=[
        TermQuery("items.name", "alice"),
        RangeQuery("items.age", range_to=40),
    ]
)
query = NestedQuery("items", child_query)
search_query = SearchQuery(
    query,
    limit=10,
    get_total_count=True,
)
response = client.search(
    "example_table",
    "example_index",
    search_query,
    ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.total_count)
for row in response.rows:
    print(row)

Parameter

Permintaan pencarian

Metode search berisi parameter berikut.

Nama

Tipe

Deskripsi

table_name (wajib)

str

Nama tabel data.

index_name (wajib)

str

Nama indeks pencarian.

search_query (wajib)

SearchQuery

Kondisi kueri dan konfigurasi kueri umum.

columns_to_get (opsional)

ColumnsToGet

Konfigurasi kolom yang dikembalikan. Jika parameter ini tidak ditentukan, hanya kolom kunci primer yang dikembalikan.

routing_keys (opsional)

list

Daftar nilai kunci primer untuk bidang routing kustom. Anda tidak perlu menentukan parameter ini jika routing kustom tidak dikonfigurasi.

timeout_s (opsional)

int

Timeout permintaan dalam detik. Jika parameter ini tidak ditentukan, timeout tingkat client yang digunakan.

Konfigurasi kueri

search_query bertipe SearchQuery dan berisi parameter berikut.

Nama

Tipe

Deskripsi

query (wajib)

Query

Kondisi kueri. Atur parameter ini ke NestedQuery.

sort (opsional)

Sort

Urutan pengurutan hasil kueri. Untuk informasi selengkapnya, lihat Pengurutan dan paginasi hasil.

get_total_count (opsional)

bool

Menentukan apakah jumlah total baris yang cocok dikembalikan. Nilai default: False. Mengatur parameter ini ke True meningkatkan beban kueri.

next_token (opsional)

bytes

Token paginasi. Atur parameter ini ke next_token dari respons sebelumnya untuk mengambil halaman berikutnya. Untuk informasi selengkapnya, lihat Pengurutan dan paginasi hasil.

offset (opsional)

int

Offset tempat kueri saat ini dimulai. Gunakan parameter ini untuk paginasi dangkal.

limit (opsional)

int

Jumlah maksimum baris yang dikembalikan. Jika parameter ini diatur ke 0, tidak ada data baris yang dikembalikan.

aggs (opsional)

list[Agg]

Konfigurasi agregasi. Untuk informasi selengkapnya, lihat Agregasi.

group_bys (opsional)

list[BaseGroupBy]

Konfigurasi pengelompokan. Untuk informasi selengkapnya, lihat Agregasi.

collapse_field (opsional)

Collapse

Konfigurasi collapsing hasil, yang menghapus hasil duplikat berdasarkan bidang tertentu. Untuk informasi selengkapnya, lihat Collapsing hasil kueri.

Kondisi kueri

search_query.query bertipe NestedQuery dan berisi parameter berikut.

Nama

Tipe

Deskripsi

path (wajib)

str

Path bidang Nested. Untuk bidang Nested multitingkat, tentukan path lengkap, seperti items.details.

query (wajib)

Query

Kondisi kueri yang dijalankan pada baris anak di path. Anda dapat menggunakan tipe Query apa pun. Bidang anak harus menggunakan path lengkap, seperti items.name.

score_mode (opsional)

ScoreMode

Metode yang digunakan untuk menghitung skor baris induk ketika beberapa baris anak cocok. NONE (default) tidak menghitung skor relevansi. AVG, MAX, MIN, dan TOTAL menggunakan rata-rata, maksimum, minimum, dan jumlah skor baris anak.

inner_hits (opsional)

InnerHits

Konfigurasi pengembalian, pengurutan, paginasi, dan penyorotan untuk baris anak yang cocok. Jika parameter ini tidak ditentukan, detail baris anak yang cocok tidak dikembalikan.

weight (opsional)

float

Bobot relevansi kondisi kueri. Nilainya harus berupa bilangan titik mengambang positif. Nilai default: 1.0.

Baris anak yang cocok

search_query.query.inner_hits bertipe InnerHits dan berisi parameter berikut.

Nama

Tipe

Deskripsi

sort (wajib)

Sort

Urutan pengurutan baris anak yang cocok. Atur parameter ini ke None jika pengurutan tidak diperlukan.

offset (wajib)

int

Offset tempat baris anak yang cocok dikembalikan. Berikan None jika Anda tidak ingin menentukan nilai.

limit (wajib)

int

Jumlah baris anak yang cocok yang dikembalikan. Jika Anda memberikan None, server mengembalikan tiga baris anak secara default.

highlight (wajib)

Highlight

Konfigurasi ringkasan dan penyorotan untuk bidang anak. Atur parameter ini ke None jika penyorotan tidak diperlukan. Untuk informasi selengkapnya, lihat Ringkasan dan penyorotan.

Kolom yang dikembalikan

columns_to_get bertipe ColumnsToGet dan berisi parameter berikut.

Nama

Tipe

Deskripsi

column_names (opsional)

list[str]

Nama kolom atribut yang dikembalikan. Tentukan parameter ini hanya ketika return_type adalah SPECIFIED.

return_type (opsional)

ColumnReturnType

Mode kolom yang dikembalikan. NONE (default) hanya mengembalikan kolom kunci primer; SPECIFIED mengembalikan kolom atribut dalam column_names; ALL mengembalikan semua kolom atribut dari tabel; dan ALL_FROM_INDEX mengembalikan semua kolom atribut yang diindeks.

Respons

Metode search mengembalikan SearchResponse. Tabel berikut menjelaskan field intinya.

Field

Tipe

Deskripsi

rows

list[Row]

Baris yang dikembalikan oleh kueri saat ini. Jumlah baris tidak melebihi limit.

next_token

bytes

Token untuk halaman berikutnya. Jika field ini tidak kosong, berikan ke permintaan berikutnya untuk melanjutkan pembacaan.

total_count

int

Jumlah baris yang cocok. Nilainya bergantung pada konfigurasi get_total_count.

is_all_succeed

bool

Menunjukkan apakah semua partisi indeks telah dikueri. Jika nilainya False, hasil parsial dikembalikan dan total_count mungkin kurang dari jumlah aktual baris yang cocok.

agg_results

list[AggResult]

Hasil agregasi. Field ini kosong jika aggs tidak dikonfigurasi.

group_by_results

list[GroupByResult]

Hasil pengelompokan. Field ini kosong jika group_bys tidak dikonfigurasi.

search_hits

list[SearchHit]

Hit pencarian, termasuk informasi tambahan seperti skor relevansi, sorotan, dan baris anak yang cocok.

Respons kompatibel tupel

Mulai Tablestore SDK untuk Python versi 5.2.0, API pencarian mengembalikan objek respons, bukan tupel. Versi 5.1.0 dan sebelumnya mengembalikan tupel secara langsung. Pada versi 5.2.1 dan seterusnya, Anda dapat memanggil SearchResponse.v1_response() untuk mendapatkan tupel yang kompatibel dengan versi sebelumnya. Untuk kode baru, akses atribut SearchResponse secara langsung guna menghindari kesalahan unpacking jika field respons diperluas.

(
    rows,
    next_token,
    total_count,
    is_all_succeed,
    agg_results,
    group_by_results,
    search_hits,
) = response.v1_response()

Contoh

Mengembalikan baris anak yang cocok dan sorotan

Contoh berikut melakukan kueri terhadap baris anak bersarang di mana items.name sama dengan alice dan mengembalikan baris anak yang cocok serta fragmen yang disorot. Hasil sorotan tersedia di search_hits[].search_inner_hits[].search_hits[].highlight_result.

highlight = Highlight([HighlightParameter("items.name")])
inner_hits = InnerHits(
    sort=None,
    offset=0,
    limit=10,
    highlight=highlight,
)
query = NestedQuery(
    "items",
    TermQuery("items.name", "alice"),
    inner_hits=inner_hits,
)
response = client.search(
    "example_table",
    "example_index",
    SearchQuery(query, limit=10),
)
for search_hit in response.search_hits:
    for inner_hit in search_hit.search_inner_hits:
        for child_hit in inner_hit.search_hits:
            print(child_hit.row)
            print(child_hit.highlight_result.highlight_fields)