全部产品
Search
文档中心

OpenSearch:klausa distinct

更新时间:Jun 26, 2025

Klausa DISTINCT digunakan untuk memastikan hasil yang beragam, meningkatkan pengalaman pengguna. Sebagai contoh, jika sejumlah besar dokumen diambil dalam sebuah query dan beberapa dokumen dari pengguna tertentu memiliki skor tinggi serta mendominasi hasil, maka sebagian besar hasil pada halaman tersebut berasal dari pengguna yang sama. Hal ini dapat memengaruhi tampilan dan pengalaman pengguna. Dalam situasi seperti ini, 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

Diperlukan

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 tersisa setelah ekstraksi. Jika parameter ini disetel ke false, dokumen 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 tersebar.

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 tersebar berdasarkan parameter dalam klausa distinct. Parameter grade bersifat opsional. Jika Anda tidak mengonfigurasi parameter grade, semua dokumen diklasifikasikan ke dalam satu kategori secara default. 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 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 atau sama dengan 3.0 tetapi kurang dari 5.0 diklasifikasikan ke dalam kategori kedua. Dokumen dengan skor lebih besar 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

Berikut adalah penjelasan tentang penggunaan dan makna parameter dist_count dan dist_times. Terdapat enam dokumen 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 judul 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 menjadi tidak akurat. Dalam kasus ini, jika Anda menerapkan paginasi atau melakukan pemrosesan lain berdasarkan nilai-nilai tersebut, kesalahan mungkin terjadi. Untuk menyelesaikan masalah ini, OpenSearch menyediakan plugin DISTINCT UNIQ untuk memastikan bahwa nilai parameter total dan viewtotal tetap akurat ketika parameter dist_times, dist_count, dan reserved disetel ke 1, 1, dan false. Untuk menggunakan plugin DISTINCT UNIQ, sertakan duniqfield:field dalam klausa kvPairs clause. 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 mencocokkan 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 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