Gunakan Tablestore SDK for Python untuk menggabungkan beberapa kondisi kueri menggunakan logika AND, OR, dan NOT.
Prasyarat
Instal Tablestore SDK for Python dan inisialisasi klien.
Deskripsi
Boolean query menggunakan BoolQuery untuk menggabungkan beberapa kueri anak menjadi satu kondisi kompleks. Kueri anak dapat berupa jenis kueri apa pun atau BoolQuery lainnya. must_queries dan filter_queries merepresentasikan operasi AND, should_queries merepresentasikan OR, sedangkan must_not_queries merepresentasikan NOT. Perlu diperhatikan bahwa filter_queries dan must_not_queries tidak berkontribusi terhadap skor relevansi.
Jika minimum_should_match tidak ditentukan, should_queries bersifat opsional selama must_queries atau filter_queries ada pada tingkat yang sama. Dalam kasus lain yang melibatkan should_queries, secara default minimal satu kueri anak dari should_queries harus cocok.
BoolQuery(
must_queries=None,
must_not_queries=None,
filter_queries=None,
should_queries=None,
minimum_should_match=None,
weight=None,
)
Contoh berikut mengkueri baris di mana city bernilai hangzhou dan category bernilai book.
query = BoolQuery(
must_queries=[
TermQuery("city", "hangzhou"),
TermQuery("category", "book"),
]
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10, get_total_count=True),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)
Parameter
Permintaan pencarian
Metode search mencakup parameter berikut.
|
Name |
Type |
Description |
|
table_name (required) |
|
Nama tabel data. |
|
index_name (required) |
|
Nama indeks pencarian. |
|
search_query (required) |
|
Kondisi kueri dan konfigurasi kueri umum. |
|
columns_to_get (optional) |
|
Konfigurasi kolom yang dikembalikan. Jika parameter ini tidak ditentukan, hanya kolom kunci primer yang dikembalikan. |
|
routing_keys (optional) |
|
Nilai kunci primer dari bidang routing kustom. Parameter ini tidak diperlukan jika routing kustom tidak dikonfigurasi. |
|
timeout_s (optional) |
|
Timeout permintaan dalam detik. Jika parameter ini tidak ditentukan, timeout tingkat client akan digunakan. |
Konfigurasi kueri
search_query bertipe SearchQuery dan mencakup parameter berikut.
|
Name |
Type |
Description |
|
query (required) |
|
Kondisi kueri. Atur parameter ini ke |
|
sort (optional) |
|
Urutan pengurutan hasil. Untuk informasi selengkapnya, lihat Sort and paginate results. |
|
get_total_count (optional) |
|
Menentukan apakah jumlah total baris yang sesuai dikembalikan. Nilai default: |
|
next_token (optional) |
|
Token paginasi. Teruskan |
|
offset (optional) |
|
Offset tempat kueri dimulai. Gunakan parameter ini untuk paginasi dangkal. |
|
limit (optional) |
|
Jumlah maksimum baris yang dikembalikan. Jika parameter ini diatur ke |
|
aggs (optional) |
|
Konfigurasi agregasi metrik. Untuk informasi selengkapnya, lihat Aggregation. |
|
group_bys (optional) |
|
Konfigurasi pengelompokan. Untuk informasi selengkapnya, lihat Aggregation. |
|
collapse_field (optional) |
|
Konfigurasi collapse hasil. Untuk informasi selengkapnya, lihat Collapse query results. |
|
highlight (optional) |
|
Konfigurasi ringkasan dan penyorotan untuk bidang |
Kondisi Boolean query
search_query.query bertipe BoolQuery dan mencakup parameter berikut.
|
Name |
Type |
Description |
|
must_queries (optional) |
|
Kueri anak yang semuanya harus sesuai. Kueri anak yang sesuai berkontribusi terhadap skor relevansi. |
|
filter_queries (optional) |
|
Kueri anak yang semuanya harus sesuai tetapi tidak berkontribusi terhadap skor relevansi. |
|
should_queries (optional) |
|
Kueri anak yang jumlah minimum tertentu harus sesuai. Semakin banyak kondisi yang sesuai, semakin tinggi skor relevansinya. |
|
must_not_queries (optional) |
|
Kueri anak yang tidak boleh sesuai. Kueri ini tidak berkontribusi terhadap skor relevansi. |
|
minimum_should_match (optional) |
|
Jumlah minimum kueri anak |
|
weight (optional) |
|
Bobot kueri, yang harus berupa bilangan titik mengambang positif. Nilai default: |
Kolom yang dikembalikan
columns_to_get bertipe ColumnsToGet dan mencakup parameter berikut.
|
Name |
Type |
Description |
|
column_names (optional) |
|
Nama kolom atribut yang dikembalikan. Tentukan parameter ini hanya ketika |
|
return_type (optional) |
|
Mode kolom yang dikembalikan. |
Respons
Metode search mengembalikan SearchResponse. Tabel berikut menjelaskan bidang intinya.
|
Field |
Type |
Description |
|
rows |
|
Baris yang dikembalikan oleh kueri. Jumlahnya tidak melebihi |
|
next_token |
|
Token untuk halaman berikutnya. Nilai kosong menunjukkan bahwa tidak ada data tambahan. |
|
total_count |
|
Jumlah baris yang sesuai. Nilainya bergantung pada |
|
is_all_succeed |
|
Menunjukkan apakah semua partisi indeks telah dikueri. Jika nilainya |
|
agg_results |
|
Hasil agregasi metrik. Bidang ini kosong jika |
|
group_by_results |
|
Hasil pengelompokan. Bidang ini kosong jika |
|
search_hits |
|
Hasil pencarian, termasuk informasi tambahan seperti baris, skor relevansi, dan sorotan. |
Respons kompatibel tupel
Mulai versi 5.2.0, Tablestore SDK for Python mengembalikan objek respons alih-alih tupel untuk API pencarian. Pada versi 5.1.0 dan sebelumnya, API langsung mengembalikan tupel. Mulai 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 jumlah bidang respons diperluas.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()
Contoh
Menggabungkan kondisi OR, NOT, dan filter
Contoh berikut mensyaratkan bahwa baris harus termasuk dalam kategori book-, memenuhi minimal salah satu kategori Python atau Java, serta tidak memiliki status deprecated.
query = BoolQuery(
filter_queries=[PrefixQuery("category", "book-")],
should_queries=[
TermQuery("category", "book-python"),
TermQuery("category", "book-java"),
],
must_not_queries=[TermQuery("status", "deprecated")],
minimum_should_match=1,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
)
print(response.rows)