Saat melakukan kueri terhadap search index menggunakan Tablestore SDK untuk Java, Anda dapat menciutkan hasil berdasarkan bidang tertentu sehingga hanya satu baris dikembalikan untuk setiap nilai bidang yang berbeda.
Prasyarat
Instal Tablestore SDK untuk Java dan inisialisasi klien.
Cara kerja
Field collapse mengelompokkan baris yang cocok berdasarkan nilai bidang search index tertentu dan mengembalikan satu baris representatif dari setiap kelompok. Urutan pengurutan efektif menentukan baris yang dikembalikan dari setiap kelompok. Anda dapat menggunakan pengurutan dan paginasi untuk mengonfigurasi urutan tersebut. Field collapse hanya mengubah cara hasil kueri ditampilkan dan tidak memodifikasi data di tabel.
Pengurutan dan agregasi harus diaktifkan untuk bidang collapse. Bidang tersebut harus berupa bidang non-array dengan tipe Keyword, Long, atau Double.
Kueri collapse hanya mendukung paginasi berbasis limit dan offset. Paginasi berbasis token tidak didukung. Jumlah dari
limitdanoffsettidak boleh melebihi100000.Agregasi dan group-by beroperasi pada hasil yang cocok sebelum collapse. Total jumlah baris juga merupakan jumlah baris yang cocok sebelum collapse. Jumlah total kelompok setelah collapse tidak dapat diperoleh.
Panggil metode search untuk melakukan kueri data dan konfigurasikan SearchQuery.collapse guna menentukan bidang collapse.
SearchResponse search(SearchRequest request)
Contoh berikut melakukan kueri terhadap semua baris, menciutkan hasil berdasarkan bidang category, dan mengurutkan baris berdasarkan bidang price secara menurun. Baris dengan harga tertinggi dalam setiap kategori dikembalikan.
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(new MatchAllQuery());
searchQuery.setLimit(10);
searchQuery.setCollapse(new Collapse("category"));
searchQuery.setSort(new Sort(
Arrays.asList(new FieldSort("price", SortOrder.DESC))));
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("category", "price"));
SearchRequest request =
new SearchRequest("example_table", "example_index", searchQuery);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getRows());
Parameter
Permintaan kueri
Tipe request adalah SearchRequest. Tabel berikut menjelaskan parameter-parameternya.
|
Nama |
Tipe |
Deskripsi |
|
tableName (wajib) |
String |
Nama tabel data. |
|
indexName (wajib) |
String |
Nama search index. |
|
searchQuery (wajib) |
SearchQuery |
Kondisi kueri dan konfigurasi collapse. |
|
columnsToGet (opsional) |
SearchRequest.ColumnsToGet |
Kolom yang akan dikembalikan. Jika parameter ini tidak dikonfigurasi, hanya kolom kunci primer yang dikembalikan. |
|
timeoutInMillisecond (opsional) |
int |
Timeout kueri tingkat permintaan dalam milidetik. Nilai default: |
|
routingValues (opsional) |
|
Nilai kunci primer dari bidang routing kustom. Anda tidak perlu mengonfigurasi parameter ini jika routing kustom tidak digunakan. |
Konfigurasi kueri
Tipe request.searchQuery adalah SearchQuery. Tabel berikut menjelaskan parameter-parameternya.
|
Nama |
Tipe |
Deskripsi |
|
query (wajib) |
Query |
Kondisi kueri. Jenis kueri search index didukung. |
|
collapse (wajib) |
Collapse |
Konfigurasi collapse. |
|
offset (opsional) |
Integer |
Posisi kelompok tempat kueri saat ini dimulai. Nilai default: |
|
limit (opsional) |
Integer |
Jumlah maksimum kelompok yang dikembalikan. Nilai default: |
|
highlight (opsional) |
Highlight |
Konfigurasi ringkasan dan penyorotan. Apakah hasil yang disorot dikembalikan bergantung pada jenis kueri dan konfigurasi bidang indeks. |
|
sort (opsional) |
Sort |
Urutan pengurutan hasil, yang menentukan baris representatif yang dikembalikan dari setiap kelompok dan urutan kelompok-kelompok tersebut. Jika parameter ini tidak dikonfigurasi, pengurutan indeks digunakan. |
|
trackTotalCount (opsional) |
int |
Jumlah maksimum baris yang cocok yang diharapkan untuk dihitung. Nilai default: |
|
filter (opsional) |
SearchFilter |
Filter yang diterapkan pada hasil |
|
aggregationList (opsional) |
|
Konfigurasi agregasi. Agregasi beroperasi pada hasil yang cocok sebelum collapse. |
|
groupByList (opsional) |
|
Konfigurasi group-by. Group-by beroperasi pada hasil yang cocok sebelum collapse. |
|
token (opsional) |
byte[] |
Token paginasi. Jangan mengonfigurasi parameter ini saat menggunakan field collapse. |
Konfigurasi collapse
Tipe request.searchQuery.collapse adalah Collapse. Tabel berikut menjelaskan parameternya.
|
Nama |
Tipe |
Deskripsi |
|
fieldName (wajib) |
String |
Nama bidang collapse. Pengurutan dan agregasi harus diaktifkan untuk bidang ini, dan bidang tersebut harus berupa bidang non-array dengan tipe Keyword, Long, atau Double. |
Kolom yang dikembalikan
Tipe request.columnsToGet adalah SearchRequest.ColumnsToGet. Tabel berikut menjelaskan parameter-parameternya.
|
Nama |
Type |
Deskripsi |
|
columns (opsional) |
|
Nama kolom atribut yang akan dikembalikan. Konfigurasikan parameter ini hanya jika |
|
returnAll (opsional) |
boolean |
Menentukan apakah semua kolom atribut di tabel data akan dikembalikan. Nilai default: |
|
returnAllFromIndex (opsional) |
boolean |
Menentukan apakah semua kolom atribut yang disimpan di search index akan dikembalikan. Nilai default: |
Respons
Metode search mengembalikan SearchResponse. Tabel berikut menjelaskan bidang-bidang yang terkait dengan field collapse.
|
Nama |
Tipe |
Deskripsi |
|
totalCount |
long |
Jumlah baris yang cocok sebelum collapse. Panggil |
|
rows |
|
Baris setelah collapse. Panggil |
|
searchHits |
|
Hasil pencarian setelah collapse. Panggil |
|
isAllSuccess |
boolean |
Menunjukkan apakah semua partisi indeks telah dikueri. Panggil |
|
aggregationResults |
AggregationResults |
Hasil agregasi yang dihitung dari baris yang cocok sebelum collapse. Panggil |
|
groupByResults |
GroupByResults |
Hasil group-by yang dihitung dari baris yang cocok sebelum collapse. Panggil |