Bagaimana saya mendapatkan nilai dari semua languages
catatan dan membuatnya unik.
Rekaman
PUT items/1
{ "language" : 10 }
PUT items/2
{ "language" : 11 }
PUT items/3
{ "language" : 10 }
Pertanyaan
GET items/_search
{ ... }
# => Expected Response
[10, 11]
Bantuan apa pun akan sangat bagus.
elasticsearch
ChuckJHardy
sumber
sumber
fields: [languages]
hanya akan memberikan nilai dari bidang tertentu, tetapi membuatnya unik mungkin lebih mudah dilakukan dalam kode. Meskipun mungkin ada kumpulan praktis yang dapat melakukannya untuk Anda.Jawaban:
Anda dapat menggunakan istilah agregasi .
Pencarian akan menghasilkan sesuatu seperti:
The
size
parameter dalam menspesifikasikan agregasi jumlah maksimum istilah untuk menyertakan dalam hasil agregasi. Jika Anda membutuhkan semua hasil, setel ini ke nilai yang lebih besar dari jumlah istilah unik dalam data Anda.sumber
"fields" : ["language"]
mengembalikan hasil yang sama. Bisakah Anda memperluas jawaban Anda untuk melihat apakah kerangka agregasi hanya dapat mengembalikan nilai bahasa?#=> [10, 11, 10]
language
Anda mungkin ingin menambahkansize=0
danshard_size=0
, untuk memastikan Anda mendapatkan semua nilai. Lihat elasticsearch.org/guide/en/elasticsearch/reference/current/…Elasticsearch 1.1+ memiliki Agregasi Kardinalitas yang akan memberi Anda hitungan unik
Perhatikan bahwa ini sebenarnya adalah perkiraan dan akurasi dapat berkurang dengan kumpulan data berkardinalitas tinggi, tetapi umumnya cukup akurat dalam pengujian saya.
Anda juga dapat menyetel akurasi dengan
precision_threshold
parameter. Trade-off, atau tentu saja, adalah penggunaan memori.Grafik dari dokumen ini menunjukkan bagaimana hasil yang lebih tinggi
precision_threshold
mengarah ke hasil yang jauh lebih akurat.sumber
jika Anda ingin mendapatkan dokumen pertama untuk setiap
language
bidang nilai unik, Anda dapat melakukan ini:sumber
Saya mencari solusi semacam ini untuk diri saya juga. Saya menemukan referensi dalam istilah agregasi .
Nah, berikut ini adalah solusi yang tepat.
Tetapi jika Anda mengalami kesalahan berikut:
Dalam hal ini, Anda harus menambahkan " KEYWORD " dalam permintaan, seperti berikut:
sumber
Jika Anda ingin mendapatkan semua nilai unik tanpa perkiraan atau menyetel angka ajaib (
size: 500
), gunakan AGREGASI KOMPOSIT (ES 6.5+) .Dari dokumentasi resmi :
"Jika Anda ingin mengambil semua istilah atau semua kombinasi istilah dalam agregasi istilah bertingkat, Anda harus menggunakan AGREGASI KOMPOSIT yang memungkinkan pemberian nomor halaman pada semua istilah yang memungkinkan daripada menyetel ukuran yang lebih besar daripada kardinalitas bidang dalam agregasi istilah. agregasi istilah dimaksudkan untuk mengembalikan istilah teratas dan tidak mengizinkan penomoran halaman. "
Contoh implementasi di JavaScript:
sumber