All Products
Search
Document Center

OpenSearch:Diversifikasi hasil: klausa distinct

Last Updated:Jun 23, 2026

Klausa `distinct` mendiversifikasi hasil pencarian dengan membatasi jumlah dokumen yang memiliki nilai bidang yang sama agar tidak muncul secara berurutan. Topik ini mencakup sintaksis klausa, parameter `dist_count` dan `dist_times`, serta plugin `distinct uniq`.

Ikhtisar fungsi

Klausa `distinct` meningkatkan keragaman hasil. Ketika beberapa dokumen dari pengguna yang sama memiliki skor tinggi, dokumen-dokumen tersebut dapat mendominasi hasil teratas sehingga mengisi halaman hanya dengan konten dari satu sumber. Klausa `distinct` mengatasi masalah ini dengan melakukan pengambilan sampel dokumen dari setiap pengguna, sehingga memberi kesempatan kepada dokumen dari lebih banyak pengguna untuk muncul.

Sintaksis

Sintaksis untuk klausa `distinct` adalah: `dist_key:field,dist_count:1,dist_times:1,reserved:false`

Parameter

Type

Wajib

Nilai valid

Nilai default

Deskripsi

dist_key

string

Ya

Bidang yang digunakan untuk diversifikasi.

dist_times

int

Tidak

1

Jumlah putaran pengambilan sampel.

dist_count

int

Tidak

1

Jumlah dokumen yang diambil sampelnya dalam setiap putaran.

reserved

true/false

Tidak

true/false

true

Apakah dokumen yang tersisa setelah pengambilan sampel tetap disimpan. Jika diatur ke false, dokumen yang tersisa akan dibuang, sehingga jumlah total hasil yang cocok (`total`) menjadi tidak akurat.

update_total_hit

true/false

Tidak

true/false

false

Ketika `reserved` bernilai false, jika Anda mengatur `update_total_hit` ke true, nilai `total_hit` akhir akan dikurangi sejumlah dokumen yang dibuang oleh operasi `distinct`. Angka ini mungkin tidak tepat. Jika false, angka tersebut tidak dikurangi.

dist_filter

string

Tidak

Kondisi filter. Dokumen yang difilter tidak ikut serta dalam operasi `distinct` dan diurutkan bersama dengan kelompok hasil pertama yang dikembalikan oleh `distinct`. Secara default, semua dokumen ikut serta dalam operasi `distinct`.

grade

float

Tidak

Menentukan ambang batas untuk membagi dokumen ke dalam beberapa tingkat (grade). Operasi `distinct` kemudian dilakukan pada dokumen dalam setiap tingkat. Jika parameter ini tidak ditentukan, semua dokumen dianggap sebagai satu tingkat. Dokumen dikelompokkan berdasarkan skor mereka dari kriteria pengurutan dimensi pertama. Gunakan tanda pipa (|) untuk memisahkan beberapa ambang batas. Jumlah tingkat tidak dibatasi. Contoh: 1. `grade:3.0`: Membagi dokumen menjadi dua tingkat berdasarkan skor pengurutan dimensi pertama. Dokumen dengan skor kurang dari 3.0 berada di tingkat pertama. Dokumen dengan skor 3.0 atau lebih tinggi berada di tingkat kedua. 2. `grade:3.0|5.0`: Membagi dokumen menjadi tiga tingkat. Tingkat pertama untuk skor kurang dari 3.0. Tingkat kedua untuk skor dari 3.0 hingga 5.0. Tingkat ketiga untuk skor 5.0 atau lebih tinggi. Urutan tingkat mengikuti urutan pengurutan kriteria dimensi pertama. Misalnya, jika urutan pengurutan menurun, tingkat juga diurutkan dari tertinggi ke terendah.

Penjelasan dist_count dan dist_times

Contoh berikut mengilustrasikan cara kerja `dist_count` dan `dist_times`. Asumsikan Anda memiliki enam dokumen dengan `id` sebagai kunci primer dan `name` sebagai bidang diversifikasi:

doc1: id:11 name:a

doc2: id:22 name:a

doc3: id:33 name:a

doc4: id:44 name:b

doc5: id:55 name:c

doc6: id:66 name:c

Kasus 1: Pengaturan distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false menentukan satu putaran pengambilan sampel dan dua dokumen per putaran. Hasil yang didiversifikasi adalah: doc1, doc2, doc4, doc5, dan doc6.

Kasus 2: Pengaturan distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false menentukan dua putaran pengambilan sampel dan satu dokumen per putaran. Hasil yang didiversifikasi adalah: doc1, doc4, doc5, doc2, dan doc6.

Kasus 3: Pengaturan distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false menentukan satu putaran pengambilan sampel dan satu dokumen per putaran. Hasil yang didiversifikasi adalah: doc1, doc4, dan doc5.

Catatan

  1. Klausa `distinct` bersifat opsional.

  2. Bidang yang digunakan dalam klausa `distinct` harus dikonfigurasi sebagai bidang properti dalam skema aplikasi.

  3. Hanya tipe bidang int dan literal yang didukung. Tipe array tidak didukung.

  4. Anda tidak dapat menentukan beberapa parameter `dist_key`.

  5. Pengurutan tidak secara otomatis menghapus duplikat. Namun, Anda dapat menggunakan klausa `distinct` untuk menghapus duplikat hasil. Misalnya, untuk menghapus artikel duplikat yang memiliki judul yang sama, atur `dist_key` ke `title`, `dist_times` ke `1`, dan `dist_count` ke `1`.

Plugin distinct uniq

Ketika `reserved` bernilai `false`, nilai `total` dan `viewtotal` bisa menjadi tidak akurat, yang dapat menyebabkan masalah pada paginasi atau operasi lainnya. Plugin `distinct uniq` memperbaiki nilai-nilai tersebut ketika `dist_times` bernilai `1`, `dist_count` bernilai `1`, dan `reserved` bernilai `false`. Untuk menggunakan plugin ini, tambahkan `duniqfield:field` ke klausa `kvpair`. Untuk informasi selengkapnya, lihat klausa kvpair. Contohnya: kvpairs=duniqfield:name

Catatan:

  • `field` harus sama dengan `dist_key` dalam klausa `distinct`.

  • Plugin ini hanya berlaku untuk kueri dengan `dist_times` bernilai `1`, `dist_count` bernilai `1`, dan `reserved` bernilai `false`.

  • Karena alasan performa, plugin ini mengembalikan nilai `total` maksimum sebesar 5.000. Jika jumlah aktual hasil pencarian melebihi 5.000, nilai `total` tetap dikembalikan sebagai 5.000.

  • Batas 5.000 untuk nilai `total` hanya berlaku saat plugin `distinct uniq` digunakan. Jika plugin tidak digunakan, nilai `total` tidak dibatasi hingga 5.000.

  • Jika Anda menggunakan plugin ini dan kueri mengenai volume data yang sangat besar, seperti jutaan catatan, kueri tersebut mungkin mengalami timeout.

Contoh

  1. Cari dokumen yang berisi "Zhejiang University" dan dibuat setelah timestamp 1402301230. Diversifikasi hasil berdasarkan bidang `company_id`. Lakukan 10 putaran pengambilan sampel dan ambil 2 hasil per putaran.

    query=default:'Zhejiang University'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10
  2. Cari dokumen yang berisi "Zhejiang University". Gunakan bidang `company_id` untuk menghapus duplikat hasil, hanya menyimpan satu dokumen per perusahaan. Buang dokumen yang tersisa dan perbarui jumlah total hasil yang cocok.

    query=default:'Zhejiang University'&&distinct=dist_key:company_id,dist_count:1,dist_times:1,reserved:false&&kvpairs=duniqfield:company_id