Fitur collapse melakukan deduplikasi pada set hasil kueri berdasarkan kolom tertentu sehingga setiap nilai unik hanya muncul sekali dalam hasil yang dikembalikan. Gunakan fitur ini untuk menjaga keragaman hasil kueri ketika satu kategori mendominasi set hasil.
Fitur collapse dapat mencapai deduplikasi (Distinct) di sebagian besar skenario, setara dengan melakukan deduplikasi berdasarkan kolom collapse. Namun, fitur ini hanya berlaku untuk kolom bertipe integer, bilangan titik mengambang, dan Keyword, tidak mendukung kolom bertipe array, serta hanya dapat mengembalikan maksimal 100.000 hasil terurut pertama.
Batasan penggunaan
Sebelum menggunakan fitur collapse, perhatikan batasan berikut:
-
Tipe kolom yang didukung — Fitur collapse hanya berlaku untuk kolom bertipe integer, bilangan titik mengambang, dan Keyword. Kolom bertipe array tidak didukung.
-
Paginasi — Fitur collapse hanya mendukung paginasi menggunakan offset dan limit. Paginasi berbasis token tidak didukung.
-
Agregasi — Saat Anda menggunakan agregasi statistik bersama fitur collapse, agregasi hanya diterapkan pada set hasil sebelum operasi collapse.
-
Batas jumlah kelompok — Setelah operasi collapse, jumlah total kelompok yang dikembalikan bergantung pada nilai maksimum dari offset ditambah limit. Maksimal 100.000 kelompok dapat dikembalikan.
-
Jumlah total — Jumlah total baris dalam respons adalah jumlah baris yang sesuai sebelum operasi collapse. Anda tidak dapat memperoleh jumlah total kelompok setelah operasi collapse.
Parameter
Fitur collapse disediakan oleh operasi Search dan diimplementasikan menggunakan parameter collapse. Tabel berikut menjelaskan parameter yang digunakan dalam kueri collapse.
| Parameter | Deskripsi |
| query | Tipe kueri apa pun. |
| collapse | Pengaturan collapse, yang mencakup pengaturan fieldName. fieldName: nama kolom yang digunakan untuk melakukan collapse pada set hasil. Parameter ini hanya berlaku untuk kolom bertipe integer, bilangan titik mengambang, dan Keyword. Kolom bertipe array tidak didukung. |
| offset | Posisi awal kueri saat ini. |
| limit | Jumlah maksimum baris yang dikembalikan untuk kueri saat ini. Jika Anda hanya ingin memperoleh jumlah baris tanpa memerlukan datanya, atur limit ke 0. Tidak ada baris yang dikembalikan. |
| getTotalCount | Menentukan apakah jumlah total baris yang sesuai akan dikembalikan. Nilai default-nya adalah false, yang berarti jumlah total baris yang sesuai tidak dikembalikan. Mengembalikan jumlah total baris yang sesuai memengaruhi performa kueri. |
| tableName | Nama tabel data. |
| indexName | Nama indeks pencarian. |
| columnsToGet | Menentukan apakah semua kolom akan dikembalikan. Parameter ini mencakup pengaturan returnAll dan columns. Nilai default returnAll adalah false, yang berarti tidak semua kolom dikembalikan. Dalam hal ini, Anda dapat menggunakan columns untuk menentukan kolom yang akan dikembalikan. Jika Anda tidak menggunakan columns untuk menentukan kolom yang akan dikembalikan, hanya kolom kunci primer yang dikembalikan. Jika Anda mengatur returnAll ke true, semua kolom akan dikembalikan. |
Penggunaan
Anda dapat menggunakan antarmuka baris perintah atau SDK untuk melakukan collapse pada hasil saat mengkueri data.
Gunakan Akun Alibaba Cloud atau RAM user dengan izin yang diperlukan untuk operasi Tablestore. Untuk memberikan izin kepada RAM user, lihat Memberikan izin kepada RAM user menggunakan Kebijakan RAM.
Jika Anda menggunakan SDK atau tool baris perintah, buat AccessKey untuk Akun Alibaba Cloud atau RAM user Anda jika belum memilikinya.
Anda telah membuat tabel data.
Indeks Pencarian telah dibuat untuk tabel data tersebut.
Jika Anda menggunakan SDK, inisialisasi Tablestore Client.
Jika Anda menggunakan tool baris perintah, unduh dan jalankan tool tersebut, lalu konfigurasikan koneksi ke instans Anda dan pilih tabel target. Untuk informasi selengkapnya, lihat Mengunduh tool baris perintah, Menjalankan tool dan mengonfigurasi informasi koneksi, dan Operasi tabel data.
Jalankan perintah search di antarmuka baris perintah untuk mengkueri data menggunakan indeks pencarian, dan konfigurasikan parameter Collapse dalam kondisi kueri untuk menggunakan fitur collapse. Untuk informasi selengkapnya, lihat Indeks pencarian.
-
Jalankan perintah
searchuntuk mengkueri data dalam tabel menggunakan indeks pencarian dan mengembalikan semua kolom yang diindeks.
search -n search_index --return_all_indexed
-
Masukkan kondisi kueri saat diminta. Contoh kodenya sebagai berikut:
{
"Offset": -1,
"Limit": 10,
"Collapse": {
"FieldName": "product_name"
},
"Sort": null,
"GetTotalCount": true,
"Token": null,
"Query": {
"Name": "MatchQuery",
"Query": {
"FieldName": "user_id",
"Text": "00002",
"MinimumShouldMatch": 1
}
}
}
Tabel berikut menjelaskan field utama dalam contoh tersebut:
| Field | Deskripsi |
| Offset | Posisi awal kueri. Nilai -1 menunjukkan bahwa tidak ada offset yang diterapkan. |
| Limit | Jumlah maksimum baris yang dikembalikan. |
| Collapse.FieldName | Nama kolom yang digunakan untuk melakukan deduplikasi hasil. Dalam contoh ini, product_name digunakan sebagai kolom collapse. Ganti nilai ini dengan nama kolom target Anda. |
| Query | Kondisi kueri. Contoh ini menggunakan MatchQuery pada kolom user_id. Ganti nama field dan teks kueri dengan nilai Anda sendiri. |
Setelah kueri mengembalikan hasil, verifikasi bahwa fitur collapse bekerja sesuai harapan dengan memeriksa bahwa nilai-nilai dalam kolom collapse bersifat unik di seluruh baris yang dikembalikan.
Gunakan SDK
Anda dapat menggunakan Java SDK, Go SDK, Python SDK, Node.js SDK, .NET SDK, atau PHP SDK untuk melakukan collapse pada hasil saat mengkueri data. Contoh berikut menggunakan Java SDK untuk menjelaskan cara menggunakan fitur collapse.
Contoh berikut mengkueri semua baris, melakukan collapse pada hasil berdasarkan field category, dan mengurutkan baris berdasarkan field price secara menurun. Baris dengan harga tertinggi di setiap kategori akan 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());
Kueri data
Dalam Mode VCU (sebelumnya Mode Reserved), mengkueri data menggunakan indeks pencarian mengonsumsi sumber daya komputasi VCU. Dalam Mode CU (sebelumnya Mode Pay-As-You-Go), mengkueri data menggunakan indeks pencarian mengonsumsi throughput baca. Untuk informasi selengkapnya, lihat Penagihan indeks pencarian.
Mengkueri data menggunakan indeks pencarian mengonsumsi throughput baca. Untuk informasi selengkapnya, lihat Item yang dapat ditagih untuk indeks pencarian.
Menggunakan fitur collapse saat mengkueri data tidak memengaruhi aturan penagihan yang sudah ada.
FAQ
Referensi
Search Index mendukung berbagai jenis kueri untuk kueri data multi-dimensi, termasuk kueri tepat, kueri istilah, Pencocokan semua kueri, kueri cocok, kueri cocok frasa, kueri rentang, kueri awalan, kueri akhiran, kueri wildcard, kueri wildcard berbasis token, kueri multi-bidang, kueri geografis, kueri bersarang, Pencarian vektor, dan kueri keberadaan.
Saat mengkueri data, Anda dapat mengurutkan dan melakukan paginasi pada set hasil atau melakukan collapse (deduplikasi).
Untuk analisis data, seperti mencari nilai maksimum atau minimum, menghitung jumlah, atau menghitung baris, Anda dapat menggunakan fitur agregasi statistik atau kueri SQL.
Untuk mengekspor data dengan cepat tanpa mempertimbangkan urutan set hasil, Anda dapat menggunakan fitur Parallel Scan.