All Products
Search
Document Center

OpenSearch:Klausa distinct

Last Updated:Aug 22, 2026

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:1 dan dist_times:1 untuk menyimpan tepat satu dokumen per nilai bidang.

  • Correcting skew: Saat satu penjual atau penulis mendominasi hasil teratas, gunakan dist_count dan dist_times untuk 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

ParameterTipeWajibBawaanDeskripsi
dist_keystringYa—Bidang yang digunakan untuk menyebarkan hasil. Harus merupakan bidang atribut bertipe INT atau LITERAL.
dist_countintTidak1Jumlah dokumen yang diekstraksi per operasi penyebaran.
dist_timesintTidak1Jumlah operasi penyebaran yang dilakukan.
reservedtrue/falseTidaktrueApakah dokumen yang tidak diekstraksi tetap dipertahankan. Atur ke false untuk membuangnya.
update_total_hittrue/falseTidakfalseHanya 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_filterstringTidak—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.
gradefloatTidak—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.
Peringatan

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:

Dokumenidname
doc111a
doc222a
doc333a
doc444b
doc555c
doc666c

Contoh 1 — Ekstraksi 2 dokumen per operasi, 1 operasi:

distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false

Hasil: 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:false

Hasil: 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:false

Hasil: 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:

KategoriRentang skor
Pertamaskor < 3.0
Keduaskor >= 3.0

Dua ambang batas — grade:3.0|5.0 membuat tiga kategori:

KategoriRentang skor
Pertamaskor < 3.0
Kedua3.0 <= skor < 5.0
Ketigaskor >= 5.0

Tidak ada batasan jumlah ambang batas.

Catatan penggunaan

  • Klausa distinct bersifat opsional.

  • Bidang yang dirujuk dalam dist_key harus dikonfigurasi sebagai bidang atribut dalam skema aplikasi.

  • dist_key hanya 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 dengan dist_count:1 dan dist_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, dan reserved=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:10

Menghapus 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