全部产品
Search
文档中心

OpenSearch:Aggregasi dan diskretisasi - klausa distinct

更新时间:Jun 26, 2025

Klausa distinct memastikan hasil yang beragam, meningkatkan pengalaman pengguna. Misalnya, jika banyak dokumen diambil dalam sebuah query dan beberapa dokumen dari pengguna tertentu mendominasi hasil karena skor tinggi, sebagian besar hasil pada halaman tersebut berasal dari pengguna yang sama. Hal ini memengaruhi tampilan dan pengalaman pengguna. Dalam situasi seperti itu, klausa distinct dapat digunakan untuk mengekstrak dokumen dari setiap pengguna sehingga dokumen dari berbagai pengguna dapat ditampilkan.

Sintaksis

dist_key:field,dist_count:1,dist_times:1,reserved:false.

Parameter

Tipe

Wajib

Nilai valid

Nilai default

Deskripsi

dist_key

string

Ya

Bidang yang akan disebar.

dist_times

int

Tidak

1

Jumlah ekstraksi.

dist_count

int

Tidak

1

Jumlah dokumen yang diekstraksi dalam satu ekstraksi.

reserved

true/false

Tidak

true/false

true

Menentukan apakah akan menyimpan dokumen yang tersisa setelah ekstraksi. Jika parameter ini disetel ke false, dokumen yang tersisa dibuang. Akibatnya, jumlah total hasil yang cocok menjadi tidak akurat.

update_total_hit

true/false

Tidak

true/false

false

Jika Anda menyetel nilai parameter reserved ke false dan nilai parameter update_total_hit ke true, sistem menghitung selisih antara jumlah dokumen yang dibuang dan nilai parameter total_hit. Nilai parameter respons total_hit mungkin tidak akurat. Jika Anda menyetel nilai parameter update_total_hit ke false, nilai parameter total_hit mencakup jumlah dokumen yang dibuang.

dist_filter

string

Tidak

Kondisi filter. Dokumen yang difilter tidak disebar, tetapi diurutkan bersama dengan kelompok pertama dokumen tersebar. Secara default, semua dokumen disebar.

grade

float

Tidak

Ambang batas untuk mengklasifikasikan dokumen ke dalam kategori yang berbeda. Semua dokumen diklasifikasikan ke dalam kategori yang berbeda berdasarkan ambang batas yang ditentukan. Dokumen dalam setiap kategori disebar berdasarkan parameter dalam klausa distinct. Parameter grade bersifat opsional. Jika Anda tidak mengonfigurasi parameter grade, secara default semua dokumen diklasifikasikan ke dalam satu kategori. Dokumen diklasifikasikan berdasarkan ambang batas yang ditentukan. Pisahkan ambang batas dengan garis vertikal (|). Jumlah ambang batas yang dapat Anda tentukan tidak terbatas. Contoh 1: grade:3.0. Dalam kasus ini, dokumen diklasifikasikan ke dalam dua kategori berdasarkan ambang batas yang ditentukan. Dokumen dengan skor kurang dari 3.0 diklasifikasikan ke dalam kategori pertama. Dokumen dengan skor lebih besar dari atau sama dengan 3.0 diklasifikasikan ke dalam kategori kedua. Contoh 2: grade:3.0|5.0. Dalam kasus ini, dokumen diklasifikasikan ke dalam tiga kategori. Dokumen dengan skor kurang dari 3.0 diklasifikasikan ke dalam kategori pertama. Dokumen dengan skor lebih besar dari atau sama dengan 3.0 tetapi kurang dari 5.0 diklasifikasikan ke dalam kategori kedua. Dokumen dengan skor lebih besar dari atau sama dengan 5.0 diklasifikasikan ke dalam kategori ketiga. Kategori diurutkan dalam urutan yang sama seperti yang digunakan untuk mengurutkan dokumen dalam kategori pertama. Jika dokumen dalam kategori pertama diurutkan secara menurun, kategori juga diurutkan secara menurun. Ini juga berlaku sebaliknya.

Penjelasan tentang parameter dist_count dan dist_times

Contoh berikut menjelaskan penggunaan dan makna parameter dist_count dan dist_times. Enam dokumen disediakan, dengan id sebagai bidang kunci utama dan name sebagai bidang yang akan disebar.

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

Contoh 1: distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false. Pada contoh ini, satu ekstraksi dilakukan dan dua dokumen diekstraksi. Hasil setelah penyebaran adalah: doc1, doc2, doc4, doc5, dan doc6.

Contoh 2: distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false. Pada contoh ini, dua ekstraksi dilakukan. Dalam setiap ekstraksi, satu dokumen diekstraksi. Hasil setelah penyebaran adalah: doc1, doc4, doc5, doc2, dan doc6.

Contoh 3: distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false. Pada contoh ini, satu ekstraksi dilakukan dan satu dokumen diekstraksi. Hasil setelah penyebaran adalah: doc1, doc4, dan doc5.

Catatan penggunaan

  1. Klausa distinct bersifat opsional.

  2. Bidang yang dirujuk dalam klausa distinct harus dikonfigurasi sebagai bidang atribut saat Anda mendefinisikan skema aplikasi.

  3. Anda tidak dapat menentukan bidang tipe ARRAY dalam klausa distinct. Hanya bidang tipe INT dan LITERAL yang didukung.

  4. Anda hanya dapat menentukan satu bidang untuk disebar.

  5. Fitur sortir tidak dapat menghapus duplikat secara otomatis. Namun, Anda dapat menggunakan klausa distinct untuk menghapus duplikat. Sebagai contoh, jika Anda ingin menghapus duplikat dokumen dengan judul yang sama, Anda dapat menentukan title sebagai bidang yang akan disebar dan melakukan satu ekstraksi. Dalam ekstraksi tersebut, satu dokumen diekstraksi.

Plugin distinct uniq

Jika parameter reserved disetel ke false, nilai parameter total dan viewtotal yang terkait dengan hasil pencarian tidak akurat. Dalam kasus ini, jika Anda menerapkan paginasi atau melakukan pemrosesan lain berdasarkan nilai-nilai ini, kesalahan mungkin terjadi. Untuk menyelesaikan masalah ini, OpenSearch menyediakan plugin distinct uniq untuk memastikan bahwa nilai parameter total dan viewtotal akurat ketika parameter dist_times, dist_count, dan reserved disetel ke 1, 1, dan false. Tambahkan duniqfield:field ke klausa kvpairs. Contoh: kvpairs=duniqfield:name.

Catatan

  • Nilai parameter field harus sama dengan nilai parameter dist_key dalam klausa distinct.

  • Plugin ini hanya bekerja ketika parameter dist_times, dist_count, dan reserved disetel ke 1, 1, dan false. Jika nilai parameter ini berubah, plugin ini tidak bekerja.

  • Untuk alasan performa, plugin ini mengembalikan maksimal 5.000 hasil pencarian dalam setiap query meskipun lebih dari 5.000 hasil pencarian diperoleh.

  • Jika Anda menggunakan plugin ini dalam query yang mengenai jutaan catatan data, timeout mungkin terjadi.

Contoh

  1. Anda ingin mencari dokumen di mana nilai parameter create_time lebih besar dari 1402301230 dan "Zhejiang University" terkandung. Dokumen yang diambil disebar berdasarkan bidang company_id. Total sepuluh ekstraksi dilakukan. Dalam setiap ekstraksi, dua dokumen diekstraksi. Dokumen yang diekstraksi diurutkan di bagian belakang.

    query=default:'Zhejiang University'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10
  2. Anda ingin mencari dokumen yang mengandung "Zhejiang University". Dokumen yang diambil disebar berdasarkan bidang company_id. Satu ekstraksi dilakukan, dan satu dokumen diekstraksi. Dokumen yang tersisa setelah ekstraksi dibuang, dan hanya dokumen yang diekstraksi yang dikembalikan.

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