Anda dapat melakukan kueri bersarang untuk menanyakan data di subbidang dari bidang Bersarang. Bidang Bersarang tidak dapat langsung di-kueri. Untuk menanyakan sebuah bidang Bersarang, Anda harus menentukan jalur dari bidang Bersarang dan subkueri dalam objek NestedQuery. Subkueri bisa berupa jenis kueri apa pun.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Sebuah tabel data telah dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Indeks pencarian telah dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat indeks pencarian.
Parameter
Parameter | Deskripsi |
path | Jalur dari bidang Bersarang. Bidang Bersarang menggunakan struktur pohon. Sebagai contoh, news.title menentukan subbidang judul dalam bidang Bersarang bernama news. |
query | Kueri pada subbidang dalam bidang Bersarang. Kueri ini bisa berupa kueri dari jenis apa pun. |
score_mode | Nilai yang digunakan untuk menghitung skor ketika sebuah bidang berisi beberapa nilai. |
table_name | Nama tabel data. |
index_name | Nama indeks pencarian. |
inner_hits | Pengaturan subbidang dalam bidang Bersarang.
|
Contoh
Bidang Bersarang tingkat tunggal
Contoh berikut menunjukkan cara menanyakan baris di mana nilai bidang col_nested.col_long lebih besar dari atau sama dengan 100 dan kurang dari atau sama dengan 300.
Lakukan kueri bersarang menggunakan Tablestore SDK untuk Python V5.2.1 atau yang lebih baru
Jika Anda menggunakan Tablestore SDK untuk Python V5.2.1 atau yang lebih baru untuk melakukan kueri bersarang, objek SearchResponse dikembalikan secara default. Kode berikut memberikan contoh permintaan:
nested_query = RangeQuery('col_nested.col_long', range_from=100, range_to=300, include_lower=True, include_upper=True) query = NestedQuery('col_nested', nested_query) search_response = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ) print('request_id : %s' % search_response.request_id) print('is_all_succeed : %s' % search_response.is_all_succeed) print('total_count : %s' % search_response.total_count) print('rows : %s' % search_response.rows)Anda dapat menggunakan permintaan contoh berikut untuk mengembalikan hasil TUPLE:
nested_query = RangeQuery('col_nested.col_long', range_from=100, range_to=300, include_lower=True, include_upper=True) query = NestedQuery('col_nested', nested_query) rows, next_token, total_count, is_all_succeed, agg_result, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response()Lakukan kueri bersarang menggunakan Tablestore SDK untuk Python versi sebelum 5.2.1
Jika Anda menggunakan versi Tablestore SDK untuk Python sebelum 5.2.1 untuk melakukan kueri bersarang, hasil TUPLE dikembalikan secara default. Kode berikut memberikan contoh permintaan:
nested_query = RangeQuery('col_nested.col_long', range_from=100, range_to=300, include_lower=True, include_upper=True) query = NestedQuery('col_nested', nested_query) rows, next_token, total_count, is_all_succeed = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
Bidang Bersarang yang memiliki fitur sorotan diaktifkan
Kode contoh berikut menunjukkan cara menanyakan baris di mana nilai bidang col_nested.col_text adalah tablestore dan menyoroti kata kunci dalam hasil kueri.
def _print_rows(request_id, rows, total_count):
print('Request ID:%s' % request_id)
for row in rows:
print(row)
print('Rows return: %d' % len(rows))
print('Total count: %d' % total_count)
def _print_search_hit(hits):
for search_hit in hits:
print('\t score is %.6f' % search_hit.score)
for highlight_field in search_hit.highlight_result.highlight_fields:
print('\t\t highlight:%s:%s' % (highlight_field.field_name, highlight_field.field_fragments))
for inner_result in search_hit.search_inner_hits:
print('\t\t path:%s' % (inner_result.path))
_print_search_hit(inner_result.search_hits)
def highlight_query_for_nested(client):
print('********** Begin HighlightQueryForNested **********')
sort = Sort(
sorters=[FieldSort('col_nested.col_long', sort_order=SortOrder.ASC)]
)
highlight_parameter = HighlightParameter("col_nested.col_text", 1, 18, '', HighlightFragmentOrder.TEXT_SEQUENCE)
highlight_clause = Highlight([highlight_parameter], HighlightEncoder.PLAIN_MODE)
inner_hits_parameter = InnerHits(None, 0, 10, highlight_clause)
query = NestedQuery('n', MatchQuery('col_nested.col_text', 'tablestore'), ScoreMode.AVG, inner_hits_parameter)
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, limit=2, get_total_count=True),
ColumnsToGet(return_type=ColumnReturnType.ALL_FROM_INDEX)
)
print('----- Print Rows:')
print('search rows count:%d' % len(search_response.rows))
_print_rows(search_response.request_id,search_response.rows,search_response.total_count)
print('----- Print Highlight Result:')
search_hits = search_response.search_hits
print('search hit count:%d' % len(search_hits))
_print_search_hit(search_hits)
print('********** End HighlightQuery **********')FAQ
Referensi
Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri terms, kueri match all, kueri match, kueri match phrase, kueri prefix, kueri range, kueri wildcard, kueri geo, kueri Boolean, kueri vektor KNN, kueri nested, dan kueri exists. Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk menanyakan data dari berbagai dimensi sesuai dengan kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur Pengurutan dan paging. Untuk informasi lebih lanjut, lihat Pengurutan dan paging.
Anda dapat menggunakan fitur collapse (distinct) untuk menggabungkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari tipe yang ditentukan hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika Anda ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi operasi Pencarian atau menjalankan pernyataan SQL. Sebagai contoh, Anda bisa mendapatkan nilai minimum dan maksimum, jumlah total, dan jumlah baris keseluruhan. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika Anda ingin 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 lebih lanjut, lihat Pemindaian paralel.