MUST ve bool sorgusu arasındaki lastik arama farkı


169

ES'de MUSTve SHOULDbool sorgusu arasındaki fark nedir ?

Ben ise SADECE O zaman kullanmalıyım benim terimleri içeren sonucu must?

Ben sadece belirli değerleri içermeli bir sorgu var ve aynı zamanda bugünün saat / tarih - NOW daha düşük bir tarih / zaman damgası olan sonuç yok

Ayrıca

Aşağıdaki kod gibi bir zorunluluk içinde birden fazla filtre kullanabilir miyim:

"filtered": {
"filter": {
"bool" : {
        "must" : {
            "term" : { "type" : 1 }
            "term" : { "totals" : 14 }
            "term" : { "groupId" : 3 }
            "range" : {
                "expires" : {
                    "gte": "now"
                }
            }
        },

Yanıtlar:


251

must anlamına gelir: Yan tümce (sorgu) eşleşen belgelerde görünmelidir. Bu hükümler, mantıksal AND gibi eşleşmelidir .

şu anlama gelir: Bu yan tümcelerden en az biri mantıksal OR gibi eşleşmelidir .

Temel olarak AND ve OR mantıksal operatörleri gibi kullanılırlar. Bkz bu .

Şimdi bir bool sorgusunda :

gerekir anlamına gelir: Belgenin eklenmesi için eşleşmesi gereken maddeler .

gereken araçlar: Bu hükümler uyuyorsa, artırmak _score; aksi takdirde hiçbir etkisi yoktur. Her belge için alaka düzeyini artırmak için kullanılırlar.


Evet, içinde birden fazla filtre kullanabilirsiniz must.


Partiye biraz geç, ama mustkategoriler, fiyatlandırma ve shouldboyut ve renk gibi özellikler için. Şimdi, L ve XL boyutu seçilirse, bu ikisi arasında bir zorunluluktur, ancak yeşil renk de seçilirse, (L VEYA XL boyutları) VE (renk yeşil) için olması gerekir. Mümkün mü?
Mave

Bu durumda filtrelerin nitelikler için daha iyi bir yaklaşım olabileceğine inanıyorum . Alaka düzeyli aramalara değil, tam eşleşmelere yöneliktirler. Daha fazla bilgi için dokümanlardaki sorgulara ve filtrelere bakın .
Jim K.

6
minimum_number_should_match = 1"Bu maddelerden en az birinin eşleşmesi gerektiği" fikrini uygulamak için sahip olmanız gerektiğini düşünüyorum .
Jim K.

İyi cevap! Sadece bunu anlayabilmem için çok yardımcı olan belgelerin bir kısmını paylaşmak istiyorum. elastic.co/guide/en/elasticsearch/guide/current/...
ba0708

1
JimK - ya da hayır cümlesi. Zorunlu cümlecik olmadığında, minimum_sayfa_should_match ima edilir.
LizH

15

Bu popüler bir soru olduğundan, Elasticsearch sürüm 2'de bazı şeylerin biraz değiştiğini eklemek istiyorum.

filteredSorgu yerine, boolen üst düzeyde sorgu kullanılmalıdır .

mustParçaların puanını umursamıyorsanız , o parçaları filteranahtarın içine koyun . Puanlama olmaması daha hızlı arama anlamına gelir. Ayrıca, Elasticsearch, önbelleğe alınıp alınmayacağı vb. Otomatik olarak önbellekleme için must_notde geçerli olacaktır.

Referans: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

Ayrıca, "gte": "now"milisaniye tanecikliğinden dolayı önbelleğe alınamayan zihin . Bir mustcümlede iki aralık kullanın : biri ile now/1hdiğeri ile now, birincisi bir süre önbelleğe alınabilir ve ikincisi daha küçük bir sonuç kümesinde hızlandırılmış hassas filtreleme için.


8

As söyledi belgeler :

Zorunlu: Yan tümce (sorgu) eşleşen belgelerde görünmelidir.

Gerekir: Yan tümce (sorgu) eşleşen belgede görünmelidir. Zorunlu yan tümceleri bulunmayan bir boole sorgusunda, bir veya daha fazla yan tümcesi bir belgeyle eşleşmelidir. Eşleşmesi gereken minimum koşul cümlesi sayısı minimum_should_match parametresi kullanılarak ayarlanabilir.

Başka bir deyişle, sonuçlar ile eşleşen gerekecektir tüm sorgular içinde mevcut zorunluluk maddesinin (veya maç en az birini bir should hiçbir varsa maddeleri zorunluluk şartı.

Eğer sonuç tüm sorguları tatmin etmek istediğim için, kullanmanız gereken zorunluluk .


Gerçekten de boole sorgusu içinde filtreler kullanabilirsiniz.


10
Sana ;-) "Eğer zorunluluk kullanmalısınız" yerine "sen mutlaka kullanmalıdır" anlamına düşünüyorum
jarmod
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.