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) |
|
Nama tabel data. |
|
index_name (wajib) |
|
Nama indeks pencarian. |
|
search_query (wajib) |
|
Kondisi kueri dan konfigurasi kueri umum. |
|
columns_to_get (opsional) |
|
Konfigurasi kolom yang dikembalikan. Jika parameter ini tidak ditentukan, hanya kolom kunci primer yang dikembalikan. |
|
routing_keys (opsional) |
|
Daftar nilai kunci primer untuk bidang routing kustom. Anda tidak perlu menentukan parameter ini jika routing kustom tidak dikonfigurasi. |
|
timeout_s (opsional) |
|
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) |
|
Kondisi kueri. Atur parameter ini ke |
|
sort (opsional) |
|
Urutan pengurutan hasil kueri. Untuk informasi selengkapnya, lihat Pengurutan dan paginasi hasil. |
|
get_total_count (opsional) |
|
Menentukan apakah jumlah total baris yang cocok dikembalikan. Nilai default: |
|
next_token (opsional) |
|
Token paginasi. Atur parameter ini ke |
|
offset (opsional) |
|
Offset tempat kueri saat ini dimulai. Gunakan parameter ini untuk paginasi dangkal. |
|
limit (opsional) |
|
Jumlah maksimum baris yang dikembalikan. Jika parameter ini diatur ke |
|
aggs (opsional) |
|
Konfigurasi agregasi. Untuk informasi selengkapnya, lihat Agregasi. |
|
group_bys (opsional) |
|
Konfigurasi pengelompokan. Untuk informasi selengkapnya, lihat Agregasi. |
|
collapse_field (opsional) |
|
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) |
|
Path bidang Nested. Untuk bidang Nested multitingkat, tentukan path lengkap, seperti |
|
query (wajib) |
|
Kondisi kueri yang dijalankan pada baris anak di |
|
score_mode (opsional) |
|
Metode yang digunakan untuk menghitung skor baris induk ketika beberapa baris anak cocok. |
|
inner_hits (opsional) |
|
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) |
|
Bobot relevansi kondisi kueri. Nilainya harus berupa bilangan titik mengambang positif. Nilai default: |
Baris anak yang cocok
search_query.query.inner_hits bertipe InnerHits dan berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
sort (wajib) |
|
Urutan pengurutan baris anak yang cocok. Atur parameter ini ke |
|
offset (wajib) |
|
Offset tempat baris anak yang cocok dikembalikan. Berikan |
|
limit (wajib) |
|
Jumlah baris anak yang cocok yang dikembalikan. Jika Anda memberikan |
|
highlight (wajib) |
|
Konfigurasi ringkasan dan penyorotan untuk bidang anak. Atur parameter ini ke |
Kolom yang dikembalikan
columns_to_get bertipe ColumnsToGet dan berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
column_names (opsional) |
|
Nama kolom atribut yang dikembalikan. Tentukan parameter ini hanya ketika |
|
return_type (opsional) |
|
Mode kolom yang dikembalikan. |
Respons
Metode search mengembalikan SearchResponse. Tabel berikut menjelaskan field intinya.
|
Field |
Tipe |
Deskripsi |
|
rows |
|
Baris yang dikembalikan oleh kueri saat ini. Jumlah baris tidak melebihi |
|
next_token |
|
Token untuk halaman berikutnya. Jika field ini tidak kosong, berikan ke permintaan berikutnya untuk melanjutkan pembacaan. |
|
total_count |
|
Jumlah baris yang cocok. Nilainya bergantung pada konfigurasi |
|
is_all_succeed |
|
Menunjukkan apakah semua partisi indeks telah dikueri. Jika nilainya |
|
agg_results |
|
Hasil agregasi. Field ini kosong jika |
|
group_by_results |
|
Hasil pengelompokan. Field ini kosong jika |
|
search_hits |
|
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)