Apa perbedaan antara MUST
dan SHOULD
permintaan bool di ES?
Jika saya HANYA ingin hasil yang mengandung istilah saya yang harus saya gunakan must
?
Saya memiliki kueri yang seharusnya hanya berisi nilai-nilai tertentu, dan juga tidak ada hasil yang memiliki tanggal / timestamp lebih rendah daripada waktu / tanggal todays - SEKARANG
Juga
Dapatkah saya menggunakan beberapa filter di dalam suatu keharusan seperti kode di bawah ini:
"filtered": {
"filter": {
"bool" : {
"must" : {
"term" : { "type" : 1 }
"term" : { "totals" : 14 }
"term" : { "groupId" : 3 }
"range" : {
"expires" : {
"gte": "now"
}
}
},
sumber
must
untuk kategori, atau harga, danshould
untuk atribut, seperti ukuran dan warna. Sekarang, jika ukuran L dan XL dipilih, itu adalah keharusan di antara keduanya, tetapi jika warna hijau juga dipilih, itu harus menjadi keharusan untuk (ukuran L ATAU XL) DAN (warna hijau). Apakah itu mungkin?minimum_number_should_match = 1
untuk menegakkan gagasan bahwa "setidaknya satu dari klausa ini harus cocok".Karena ini adalah pertanyaan yang populer, saya ingin menambahkan bahwa dalam versi Elasticsearch 2 hal berubah sedikit.
Alih-alih
filtered
permintaan, seseorang harus menggunakanbool
permintaan di tingkat atas.Jika Anda tidak peduli dengan skor
must
bagian, maka masukkan bagian-bagian itu ke dalamfilter
kunci. Tanpa skor berarti pencarian lebih cepat. Juga, Elasticsearch akan secara otomatis mencari tahu, apakah akan menyimpannya, dll.must_not
Sama-sama valid untuk caching.Referensi: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
Juga, pikiran yang
"gte": "now"
tidak bisa di-cache, karena granularity milidetik. Gunakan dua rentang dalammust
klausa: satu dengannow/1h
dan lainnya dengannow
sehingga yang pertama dapat di-cache untuk sementara waktu dan yang kedua untuk pemfilteran yang tepat dipercepat pada hasil yang lebih kecil.sumber
Seperti yang dikatakan dalam dokumentasi :
Dengan kata lain, hasil harus dicocokkan dengan semua pertanyaan yang ada dalam klausa harus (atau cocokkan setidaknya satu dari klausa harus jika tidak ada harus klausa.
Karena Anda ingin hasil Anda memuaskan semua pertanyaan, Anda harus menggunakan harus .
Anda memang dapat menggunakan filter di dalam kueri boolean.
sumber