Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat memanfaatkan metode pengurutan yang telah ditentukan sebelumnya atau menentukan metode pengurutan sendiri. Dengan cara ini, baris yang memenuhi kondisi kueri akan dikembalikan sesuai dengan urutan yang telah ditentukan. Jika respons mencakup banyak baris, Anda dapat menemukan data yang diperlukan dengan mengonfigurasi parameter Limit dan Offset atau menggunakan token.
Skenario Penggunaan
Kategori | Metode | Fitur | Skenario |
Pengurutan | Tentukan metode pengurutan saat membuat indeks pencarian | Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort menentukan urutan default di mana baris yang memenuhi kondisi kueri dikembalikan. | |
Tentukan metode pengurutan saat menanyakan data | Anda dapat menggunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap. | ||
Anda dapat menggunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai kunci utama. PrimaryKeySort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan pengenal unik dari data tersebut. | |||
Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau lebih kolom. FieldSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan properti seperti volume penjualan atau tayangan halaman. Dalam kebanyakan kasus, FieldSort digunakan di industri seperti e-commerce dan jejaring sosial serta aset media. | |||
Anda dapat menggunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis. GeoDistanceSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan jarak dari lokasi tertentu. Dalam kebanyakan kasus, GeoDistanceSort digunakan di industri seperti pemetaan dan logistik. Misalnya, Anda dapat mengurutkan restoran di sekitar lokasi berdasarkan jarak dari lokasi tersebut. | |||
Halaman | Tentukan metode halaman saat menanyakan data | Jika jumlah baris dalam respons kurang dari 100.000, Anda dapat menggunakan metode ini untuk melompat ke halaman tertentu. | |
Jika Anda menggunakan fitur ini, data dikembalikan halaman demi halaman dan Anda hanya bisa maju ke halaman sebelumnya. Jika Anda ingin maju ke halaman berikutnya, Anda dapat menyimpan dan menggunakan token sebelumnya karena token tetap valid selama kueri. |
Pra-pengurutan Indeks
Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Saat menggunakan indeks pencarian untuk menanyakan data, pengaturan pra-pengurutan dari parameter IndexSort menentukan urutan default untuk data yang cocok.
Saat membuat indeks pencarian, Anda dapat menentukan pengaturan pra-pengurutan dengan mengonfigurasi parameter IndexSort. Jika tidak menentukannya, data dalam indeks pencarian akan diurutkan berdasarkan nilai kunci utama.
Anda dapat menentukan PrimaryKeySort atau FieldSort sebagai metode pra-pengurutan untuk indeks pencarian. PrimaryKeySort mengurutkan data berdasarkan nilai kunci utama, sedangkan FieldSort mengurutkan data berdasarkan nilai bidang.
Indeks pencarian yang berisi bidang Nested tidak mendukung pra-pengurutan indeks.
Jika ingin memodifikasi pengaturan parameter IndexSort untuk indeks pencarian yang ada, Anda dapat memodifikasi skema indeks pencarian secara dinamis. Untuk informasi lebih lanjut, lihat Memodifikasi skema indeks pencarian secara dinamis.
Tentukan metode pengurutan saat menanyakan data
Pengurutan hanya dapat diaktifkan untuk bidang yang memiliki enable_sort_and_agg disetel ke True.
Anda dapat menentukan metode pengurutan untuk setiap kueri. Kueri berbasis indeks pencarian mendukung beberapa metode pengurutan, dan Anda juga dapat menentukan beberapa metode pengurutan berdasarkan prioritas yang berbeda.
ScoreSort
Gunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap.
Anda harus mengonfigurasi parameter untuk ScoreSort agar mengurutkan data yang cocok berdasarkan skor relevansi kata kunci. Jika tidak, data yang cocok akan diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort.
sort = Sort(
sorters=[ScoreSort(sort_order=SortOrder.DESC)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)PrimaryKeySort
Gunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai kunci utama.
sort = Sort(
sorters=[PrimaryKeySort(sort_order=SortOrder.DESC)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
) = PrimaryKeySort(sort_order=SortOrder.DESC)FieldSort
Gunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau lebih kolom tertentu.
Urutkan hasil kueri berdasarkan nilai satu kolom
Gunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai kolom yang ditentukan.
sort = Sort(
sorters=[FieldSort('a', SortOrder.ASC)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)Urutkan hasil kueri berdasarkan nilai beberapa kolom
Anda juga dapat mengurutkan hasil kueri berdasarkan nilai dua kolom dalam urutan tertentu untuk menentukan urutan pengembalian data yang cocok.
sort = Sort(
sorters=[
FieldSort('a', SortOrder.ASC),
FieldSort('b', SortOrder.ASC)
]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)GeoDistanceSort
Gunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis.
sort = Sort(
sorters=[GeoDistanceSort('g', ['32.5,116.5', '32.0,116.0'], sort_order=SortOrder.DESC, sort_mode=SortMode.MAX)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
) Tentukan metode halaman
Anda dapat menggunakan limit dan offset atau menggunakan token untuk membagi hasil kueri menjadi halaman-halaman.
Konfigurasikan parameter limit dan offset
Jika jumlah total baris dalam respons kurang dari 100.000, Anda dapat mengonfigurasi parameter limit dan offset untuk membagi baris-baris tersebut menjadi halaman. Jumlah dari nilai parameter limit dan offset tidak boleh melebihi 100.000. Nilai maksimum parameter limit adalah 100.
Untuk informasi tentang cara meningkatkan nilai maksimum parameter limit, lihat Bagaimana cara meningkatkan nilai parameter limit menjadi 1000 ketika saya memanggil operasi Pencarian fitur indeks pencarian untuk menanyakan data?
Jika Anda tidak menentukan nilai untuk parameter limit dan offset, nilai default akan digunakan. Nilai default untuk parameter limit adalah 10. Nilai default untuk parameter offset adalah 0.
query = RangeQuery('k', 'key100', 'key500', include_lower=False, include_upper=False)
search_response = client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, offset=100, 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)Gunakan token
Kami merekomendasikan penggunaan token untuk halaman dalam karena metode ini tidak memiliki batasan pada kedalaman halaman.
Jika Tablestore tidak dapat membaca semua data yang memenuhi kondisi kueri, Tablestore mengembalikan next_token. Anda dapat menggunakan next_token untuk melanjutkan pembacaan data berikutnya.
Secara default, Anda hanya bisa mundur ke halaman sebelumnya saat menggunakan token. Jika ingin maju ke halaman berikutnya, Anda dapat menyimpan dan menggunakan token sebelumnya karena token valid selama kueri.
Saat menggunakan token, metode pengurutan sama dengan metode yang digunakan dalam permintaan sebelumnya. Tablestore mengurutkan data berdasarkan bidang IndexSort secara default atau berdasarkan metode yang Anda tentukan. Anda tidak dapat menentukan metode pengurutan atau mengonfigurasi parameter offset saat menggunakan token. Data dikembalikan halaman demi halaman, yang dapat mengakibatkan kueri lambat.
Indeks pencarian yang berisi bidang bertipe Nested tidak mendukung IndexSort. Jika Anda memerlukan halaman dan menggunakan indeks pencarian yang berisi bidang bertipe Nested untuk menanyakan data, Anda harus menentukan metode pengurutan dalam kondisi kueri untuk mengembalikan data dalam urutan yang ditentukan. Jika tidak, Tablestore tidak mengembalikan next_token ketika hanya sebagian data yang memenuhi kondisi kueri dikembalikan.
query = MatchAllQuery()
all_rows = []
next_token = None
# putaran pertama
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, next_token=next_token, limit=100, get_total_count=True),
columns_to_get=ColumnsToGet(['k', 't', 'g', 'ka', 'la'], ColumnReturnType.SPECIFIED))
all_rows.extend(search_response.rows)
# loop
while search_response.next_token:
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, next_token=search_response.next_token, sort=None, limit=100, get_total_count=True),
columns_to_get=ColumnsToGet(['k', 't', 'g', 'ka', 'la'], ColumnReturnType.SPECIFIED))
all_rows.extend(search_response.rows)
print('Total rows:%d' % len(all_rows))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 berdasarkan kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur pengurutan dan halaman. Untuk informasi lebih lanjut, lihat Pengurutan dan Halaman.
Anda dapat menggunakan fitur collapse (distinct) untuk meruntuhkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari jenis yang ditentukan muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi operasi Pencarian atau menjalankan pernyataan SQL. Misalnya, Anda dapat memperoleh nilai minimum dan maksimum, jumlah, dan jumlah total baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika ingin memperoleh semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian Paralel.