Anda dapat menggunakan fitur collapse (distinct) untuk menggabungkan set hasil berdasarkan kolom tertentu saat hasil kueri mencakup sejumlah besar data dari tipe tertentu. Data dari tipe tersebut hanya ditampilkan sekali dalam hasil yang dikembalikan, memastikan keragaman jenis hasil.
Prasyarat
Klien Tablestore telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Tabel data telah dibuat dan data telah ditulis ke tabel. 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.
Catatan penggunaan
Jika Anda menggunakan fitur collapse (distinct), paginasi hanya dapat dilakukan dengan menentukan parameter offset dan limit.
Jika Anda menggabungkan dan merangkum set hasil secara bersamaan, rangkuman akan dihasilkan sebelum penggabungan.
Jika Anda menggabungkan hasil kueri, jumlah total hasil yang dikembalikan ditentukan oleh nilai parameter offset dan limit. Maksimum 100.000 hasil dapat dikembalikan.
Jumlah total baris dalam respons menunjukkan jumlah baris yang memenuhi kondisi kueri sebelum menerapkan fitur collapse (distinct). Setelah penggabungan set hasil, jumlah total nilai unik tidak dapat diquery.
Parameter
Parameter | Deskripsi |
query | Tipe kueri. Anda dapat menyetel parameter ini ke semua jenis kueri. |
collapse | Menggabungkan set hasil berdasarkan kolom yang ditentukan oleh bidang fieldName. fieldName: nama kolom berdasarkan mana set hasil digabungkan. Hanya kolom dengan nilai bertipe INTEGER, FLOATING-POINT, atau KEYWORD yang didukung. |
offset | Posisi dari mana kueri saat ini dimulai. |
limit | Jumlah maksimum baris yang ingin Anda kembalikan dalam kueri saat ini. Untuk hanya menanyakan jumlah baris yang memenuhi kondisi kueri tanpa data spesifik, atur parameter limit ke 0. |
getTotalCount | Menentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default dari parameter ini adalah false, yang menentukan bahwa jumlah total baris yang memenuhi kondisi kueri tidak dikembalikan. Jika Anda menyetel parameter ini ke true, kinerja kueri akan terpengaruh. |
tableName | Nama tabel data. |
indexName | Nama indeks pencarian. |
columnsToGet | Menentukan apakah akan mengembalikan semua kolom dari setiap baris yang memenuhi kondisi kueri. Anda dapat menentukan bidang returnAll dan columns untuk parameter ini. Nilai default dari bidang returnAll adalah false, yang menentukan bahwa tidak semua kolom dikembalikan. Dalam hal ini, Anda dapat menggunakan bidang columns untuk menentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, hanya kolom kunci utama yang dikembalikan. Jika Anda menyetel bidang returnAll ke true, semua kolom dikembalikan. |
Contoh
Berikut adalah contoh kode untuk menanyakan baris dengan nilai kolom user_id yang cocok dengan "00002", kemudian menggabungkan berdasarkan nilai kolom product_name:
private static void UseCollapse(SyncClient client){
SearchQuery searchQuery = new SearchQuery(); // Tentukan kondisi kueri.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("user_id");
matchQuery.setText("00002");
searchQuery.setQuery(matchQuery);
Collapse collapse = new Collapse("product_name"); // Menggabungkan set hasil berdasarkan kolom product_name.
searchQuery.setCollapse(collapse);
//searchQuery.setOffset(1000);// Posisi dari mana kueri saat ini dimulai.
searchQuery.setLimit(20);
//searchQuery.setGetTotalCount(true);// Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri.
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);// Tentukan nama tabel data dan nama indeks pencarian.
// Anda dapat menggunakan parameter columnsToGet untuk menentukan kolom yang ingin Anda kembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak menentukan parameter ini, hanya kolom kunci utama yang dikembalikan.
//SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
//columnsToGet.setReturnAll(true); // Atur parameter ReturnAll ke true untuk mengembalikan semua kolom.
//columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan.
//searchRequest.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(searchRequest);
//System.out.println(response.getTotalCount());
//System.out.println(response.getRows().size()); // Tampilkan jumlah baris yang dikembalikan berdasarkan kolom product_name.
System.out.println(response.getRows()); // Tampilkan nama produk yang dikembalikan berdasarkan kolom product_name.
}FAQ
Referensi
Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat menggunakan metode kueri berikut: kueri tepat, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, KNN vector query, Boolean query, nested query, dan exists query. Setelah membuat indeks pencarian, Anda dapat menggunakan metode kueri yang disediakan untuk menanyakan data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri menggunakan fitur Pengurutan dan paging. Untuk informasi lebih lanjut, lihat Melakukan pengurutan dan paging.
Anda dapat menggunakan fitur collapse (distinct) untuk menggabungkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari tipe yang ditentukan muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Untuk menganalisis data dalam tabel, Anda dapat memanggil operasi Search untuk menggunakan fitur agregasi atau kueri SQL. Misalnya, Anda dapat menanyakan nilai maksimum dan minimum, jumlah nilai, serta jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Untuk mendapatkan 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.