Saat menggunakan search index untuk mengkueri data, Anda dapat memanfaatkan metode sorting bawaan atau menentukan metode sorting sendiri. Dengan demikian, baris-baris yang memenuhi kondisi kueri akan dikembalikan sesuai urutan yang telah ditentukan sebelumnya atau yang Anda spesifikasikan. Jika respons berisi jumlah baris yang besar, Anda dapat menemukan data yang diperlukan dengan mengonfigurasi parameter limit dan offset atau menggunakan token.
Skenario
|
Category |
Method |
Feature |
Scenario |
|
Sorting |
Tentukan metode sorting saat membuat search index |
Secara default, data dalam search index diurutkan berdasarkan pengaturan presorting yang ditentukan oleh parameter IndexSort. Pengaturan presorting tersebut menentukan urutan default pengembalian baris-baris yang memenuhi kondisi kueri. |
|
|
Tentukan metode sorting saat mengkueri data |
Anda dapat menggunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci yang dihitung menggunakan algoritma BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap (full-text search). |
||
|
Anda dapat menggunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai primary key. PrimaryKeySort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan pengenal unik data tersebut. |
|||
|
Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau beberapa kolom. FieldSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan properti seperti volume penjualan atau jumlah tampilan halaman. Umumnya, FieldSort digunakan di industri seperti e-commerce, jejaring sosial, dan 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. Umumnya, GeoDistanceSort digunakan di industri seperti pemetaan dan logistik. Misalnya, Anda dapat mengurutkan restoran di sekitar suatu lokasi berdasarkan jarak dari lokasi tersebut. |
|||
|
Paging |
Tentukan metode paging saat mengkueri data |
Jika jumlah baris dalam respons kurang dari 100.000, Anda dapat menggunakan metode ini untuk melompat ke halaman tertentu. |
|
|
Secara default, Anda hanya dapat melakukan paging mundur saat menggunakan token. Namun, Anda dapat menyimpan cache dan menggunakan token sebelumnya untuk melakukan paging maju karena token tetap valid selama kueri berlangsung. |
Index presorting
Secara default, Tablestore mengurutkan data dalam search index berdasarkan urutan sortir yang telah ditentukan sebelumnya, yang disebut index presorting (IndexSort). Saat Anda mengkueri data, IndexSort menentukan urutan default hasil yang dikembalikan.
Saat membuat search index, Anda dapat menyesuaikan IndexSort. Jika tidak menentukan pengaturan ini, indeks akan menggunakan primary key sort sebagai default.
Index presorting hanya mendukung
PrimaryKeySort(primary key sort) danFieldSort(field sort).Index presorting tidak dapat digunakan untuk search index yang berisi bidang bertipe nested.
Setelah membuat search index, fitur dynamic schema modification memungkinkan Anda memodifikasi pengaturan
IndexSort.
Tentukan metode sorting saat mengkueri data
Sorting hanya dapat diaktifkan untuk bidang-bidang yang memiliki parameter EnableSortAndAgg diatur ke true.
Anda dapat menentukan metode sorting untuk setiap kueri. Kueri berbasis search index mendukung metode sorting berikut, serta memungkinkan penentuan beberapa metode sorting berdasarkan prioritas yang berbeda.
ScoreSort
ScoreSort
Mengurutkan hasil kueri berdasarkan skor relevansi, yang dihitung menggunakan algoritma BM25. Metode ini cocok untuk skenario berbasis relevansi, seperti pencarian teks lengkap.
Jika ingin mengurutkan berdasarkan skor relevansi, Anda harus secara eksplisit menentukan
ScoreSort. Jika tidak, Tablestore akan mengurutkan hasil sesuai pengaturanIndexSortpada indeks.Saat menggunakan
ScoreSort, bidang bertipe FuzzyKeyword tidak termasuk dalam proses sorting, dan parameterweighttidak berpengaruh pada bidang-bidang tersebut.
var searchQuery = new SearchQuery();
searchQuery.Sort = new Sort(new List<ISorter>() { new ScoreSort() });
PrimaryKeySort
Anda dapat menggunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai primary key.
// Urutkan hasil kueri berdasarkan nilai primary key secara ascending.
var searchQuery = new SearchQuery();
searchQuery.Sort = new Sort(new List<ISorter>() { new PrimaryKeySort() });
// Urutkan hasil kueri berdasarkan nilai primary key secara descending.
var searchQuery = new SearchQuery();
searchQuery.Sort = new Sort(new List<ISorter>() { new PrimaryKeySort(SortOrder.DESC) });
FieldSort
Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau beberapa kolom tertentu.
Urutkan hasil kueri berdasarkan nilai satu kolom
Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai kolom tertentu.
var searchQuery = new SearchQuery();
var fieldSort = new FieldSort("col", SortOrder.ASC);
searchQuery.Sort = new Sort(new List<ISorter>() { fieldSort });
Urutkan hasil kueri berdasarkan nilai beberapa kolom
Anda juga dapat mengurutkan hasil kueri berdasarkan nilai dua kolom atau lebih dengan urutan prioritas tertentu untuk menentukan urutan pengembalian data yang sesuai.
var searchQuery = new SearchQuery();
var col1Sort = new FieldSort("col", SortOrder.ASC);
var col2Sort = new FieldSort("co2", SortOrder.ASC);
searchQuery.Sort = new Sort(new List<ISorter>() { col1Sort, col2Sort });
GeoDistanceSort
Anda dapat menggunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis.
var searchQuery = new SearchQuery();
var geoDistanceSort = new GeoDistanceSort("geoCol", new List<string>(){"0","0"});
searchQuery.Sort = new Sort(new List<ISorter>() { geoDistanceSort });
Tentukan metode paging
Anda dapat mengonfigurasi parameter Limit dan Offset atau menggunakan token untuk melakukan paging terhadap baris dalam respons.
Paging berdasarkan parameter Limit dan Offset
Untuk informasi tentang cara meningkatkan nilai maksimum parameter Limit, lihat Bagaimana cara meningkatkan nilai parameter limit menjadi 1000 saat saya memanggil operasi Search dari fitur search index untuk mengkueri data?.
Jika tidak mengonfigurasi parameter Limit dan Offset saat menggunakan metode ini, nilai default Limit adalah 10 dan nilai default Offset adalah 0.
var searchQuery = new SearchQuery();
searchQuery.Query = new MatchAllQuery();
searchQuery.Limit = 100;
searchQuery.Offset = 100;
Paging berdasarkan token
Kami merekomendasikan penggunaan token untuk deep paging karena metode ini tidak memiliki batasan kedalaman paging.
Jika Tablestore tidak dapat membaca semua data yang memenuhi kondisi kueri, Tablestore akan mengembalikan NextToken. Anda dapat menggunakan NextToken untuk melanjutkan pembacaan data berikutnya.
Secara default, Anda hanya dapat melakukan paging mundur saat menggunakan token. Namun, Anda dapat menyimpan cache dan menggunakan token sebelumnya untuk melakukan paging maju karena token tetap valid selama kueri berlangsung.
Saat menggunakan token, metode sorting mengikuti metode yang digunakan pada permintaan sebelumnya. Tablestore mengurutkan data berdasarkan parameter IndexSort secara default atau berdasarkan metode yang Anda tentukan. Anda tidak dapat mengubah metode sorting atau mengonfigurasi parameter Offset saat menggunakan token. Data dikembalikan secara berurutan per halaman.
IndexSort. Jika Anda memerlukan paging dan menggunakan search index yang berisi bidang Nested untuk mengkueri data, Anda harus menentukan metode sorting dalam kondisi kueri agar data dikembalikan sesuai urutan yang ditentukan. Jika tidak, Tablestore tidak akan mengembalikan NextToken meskipun hanya sebagian data yang memenuhi kondisi kueri telah dikembalikan./// <summary>
/// Pada contoh ini, token digunakan untuk melakukan paging terhadap baris dalam respons dan Tablestore membaca semua data serta mengembalikannya dalam bentuk daftar.
/// </summary>
/// <param name="otsClient"></param>
public static SearchResponse ReadMoreRowsWithToken(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
searchQuery.Query = new MatchAllQuery();
var request = new SearchRequest(TableName, IndexName, searchQuery);
var response = otsClient.Search(request);
var rows = response.Rows;
while (response.NextToken != null) // Jika NextToken bernilai null dalam respons, berarti semua data telah dibaca.
{
request.SearchQuery.Token = response.NextToken;
response = otsClient.Search(request);
rows.AddRange(response.Rows);
}
return response;
}
FAQ
Referensi
Saat menggunakan search index untuk mengkueri data, Anda dapat menggunakan metode kueri berikut: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query, dan exists query. Anda dapat menggunakan berbagai metode kueri untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Anda dapat mengurutkan atau melakukan paging terhadap baris-baris yang memenuhi kondisi kueri dengan menggunakan fitur sorting dan paging. Untuk informasi lebih lanjut, lihat Sorting dan paging.
Anda dapat menggunakan fitur collapse (distinct) untuk menciutkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi dari operasi Search atau mengeksekusi pernyataan SQL. Misalnya, Anda dapat memperoleh nilai minimum dan maksimum, jumlah total, serta jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan SQL query.
Jika ingin memperoleh semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkannya, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian paralel.