Klausa distinct mendiversifikasi hasil pencarian dengan membatasi jumlah dokumen yang memiliki nilai bidang yang sama dalam satu set hasil, sehingga mencegah satu nilai dominan menguasai seluruh halaman hasil.
Kasus penggunaan umum:
Deduplication: Kembalikan hanya satu hasil per judul, perusahaan, atau SKU produk. Atur
dist_count:1dandist_times:1untuk menyimpan tepat satu dokumen per nilai bidang.Correcting skew: Saat satu penjual atau penulis mendominasi hasil teratas, gunakan
dist_countdandist_timesuntuk membatasi porsi mereka dan menampilkan dokumen dari nilai-nilai lainnya.
Sintaksis
distinct=dist_key:<field>,dist_count:<n>,dist_times:<n>,reserved:<true|false>Parameter
| Parameter | Tipe | Wajib | Bawaan | Deskripsi |
|---|---|---|---|---|
dist_key | string | Ya | — | Bidang yang digunakan untuk menyebarkan hasil. Harus merupakan bidang atribut bertipe INT atau LITERAL. |
dist_count | int | Tidak | 1 | Jumlah dokumen yang diekstraksi per operasi penyebaran. |
dist_times | int | Tidak | 1 | Jumlah operasi penyebaran yang dilakukan. |
reserved | true/false | Tidak | true | Apakah dokumen yang tidak diekstraksi tetap dipertahankan. Atur ke false untuk membuangnya. |
update_total_hit | true/false | Tidak | false | Hanya berlaku saat reserved bernilai false. Jika diatur ke true, nilai total_hit disesuaikan dengan mengurangi jumlah dokumen yang dibuang—namun mungkin tetap tidak akurat. Jika diatur ke false, total_hit mencakup dokumen yang dibuang. |
dist_filter | string | Tidak | — | Kondisi filter yang mengecualikan dokumen yang sesuai dari proses penyebaran. Dokumen yang dikecualikan diurutkan bersama kelompok pertama dokumen yang disebar. Secara bawaan, semua dokumen disebar. |
grade | float | Tidak | — | Satu atau beberapa ambang batas skor (dipisahkan oleh |) yang membagi dokumen ke dalam kategori sebelum penyebaran. Setiap kategori disebar secara independen menggunakan nilai dist_count dan dist_times yang sama. Kategori diurutkan dalam urutan yang sama seperti kategori pertama. Jika dihilangkan, semua dokumen diperlakukan sebagai satu kategori. |
Saat reserved diatur ke false, nilai respons total dan viewtotal menjadi tidak akurat. Jika aplikasi Anda menggunakan nilai-nilai ini untuk paginasi atau tampilan, lihat distinct uniq plug-in.
Cara kerja dist_count dan dist_times
dist_count mengontrol jumlah dokumen yang diekstraksi per operasi. dist_times mengontrol jumlah operasi yang dijalankan. Dokumen yang diekstraksi ditempatkan di awal set hasil sesuai urutan setiap operasi.
Data uji:
| Dokumen | id | name |
|---|---|---|
| doc1 | 11 | a |
| doc2 | 22 | a |
| doc3 | 33 | a |
| doc4 | 44 | b |
| doc5 | 55 | c |
| doc6 | 66 | c |
Contoh 1 — Ekstraksi 2 dokumen per operasi, 1 operasi:
distinct=dist_key:name,dist_count:2,dist_times:1,reserved:falseHasil: doc1, doc2, doc4, doc5, doc6
Setiap nilai name memberikan hingga 2 dokumen. name:a memberikan doc1 dan doc2; name:b memberikan doc4; name:c memberikan doc5 dan doc6. doc3 (dokumen ketiga dengan name:a) dibuang.
Contoh 2 — Ekstraksi 1 dokumen per operasi, 2 operasi:
distinct=dist_key:name,dist_count:1,dist_times:2,reserved:falseHasil: doc1, doc4, doc5, doc2, doc6
Operasi 1 mengambil dokumen teratas dari setiap nilai: doc1 (a), doc4 (b), doc5 (c). Operasi 2 mengambil dokumen berikutnya dari setiap nilai: doc2 (a), doc6 (c). doc3 dibuang.
Contoh 3 — Ekstraksi 1 dokumen per operasi, 1 operasi:
distinct=dist_key:name,dist_count:1,dist_times:1,reserved:falseHasil: doc1, doc4, doc5
Satu dokumen per nilai dipertahankan. Semua dokumen lainnya dibuang.
Parameter grade
Gunakan grade untuk mengklasifikasikan dokumen ke dalam kategori berdasarkan skor sebelum penyebaran. Setiap kategori disebar secara independen menggunakan nilai dist_count dan dist_times yang sama. Kategori diurutkan dalam urutan yang sama seperti kategori pertama.
Ambang batas tunggal — grade:3.0 membuat dua kategori:
| Kategori | Rentang skor |
|---|---|
| Pertama | skor < 3.0 |
| Kedua | skor >= 3.0 |
Dua ambang batas — grade:3.0|5.0 membuat tiga kategori:
| Kategori | Rentang skor |
|---|---|
| Pertama | skor < 3.0 |
| Kedua | 3.0 <= skor < 5.0 |
| Ketiga | skor >= 5.0 |
Tidak ada batasan jumlah ambang batas.
Catatan penggunaan
Klausa distinct bersifat opsional.
Bidang yang dirujuk dalam
dist_keyharus dikonfigurasi sebagai bidang atribut dalam skema aplikasi.dist_keyhanya mendukung tipe bidang INT dan LITERAL. Bidang ARRAY tidak didukung.Tentukan hanya satu bidang per klausa distinct.
Fitur sort tidak menghapus duplikat. Untuk menghapus duplikat berdasarkan suatu bidang (misalnya,
title), gunakan klausa distinct dengandist_count:1dandist_times:1.
distinct uniq plug-in
Saat reserved bernilai false, nilai respons total dan viewtotal menjadi tidak akurat. distinct uniq plug-in memperbaiki nilai-nilai tersebut saat dist_times, dist_count, dan reserved diatur ke 1, 1, dan false.
Untuk mengaktifkan plug-in ini, tambahkan duniqfield:<field> ke dalam klausa kvpairs:
kvpairs=duniqfield:<field>Nilai <field> harus sesuai dengan dist_key.
Batasan:
Hanya berfungsi saat
dist_times=1,dist_count=1, danreserved=false. Mengubah salah satu nilai ini akan menonaktifkan plug-in.Mengembalikan maksimal 5.000 hasil per kueri, meskipun lebih banyak hasil yang sesuai.
Dapat mengalami timeout pada kueri yang mengenai jutaan catatan.
Contoh
Mendiversifikasi hasil berdasarkan perusahaan, pertahankan semua dokumen:
Cari dokumen yang berisi "Zhejiang University" dengan create_time > 1402301230, sebarkan berdasarkan company_id dengan 10 operasi masing-masing 2 dokumen. Dokumen yang tidak diekstraksi dipertahankan dan ditempatkan di bagian belakang.
query=default:'Zhejiang University'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10Menghapus duplikat berdasarkan perusahaan dengan jumlah hasil yang akurat:
Cari dokumen yang berisi "Zhejiang University", simpan hanya satu dokumen per company_id, dan gunakan distinct uniq plug-in untuk mendapatkan nilai total dan viewtotal yang akurat.
query=default:'Zhejiang University'&&distinct=dist_key:company_id,dist_count:1,dist_times:1,reserved:false&&kvpairs=duniqfield:company_id