2015-03-18 12 views
6

Elasticsearch'te "filtreler" ve "filtrelenmiş sorgular" arasında bir fark varsa, çalışmayı deniyorum.Bir aramayı Elasticsearch ile filtrelemenin doğru yolu? (filtrelenmiş filtreye karşı filtre)

Aşağıdaki iki örnek istek dizimden çalıştırıldığında aynı sonuçları döndürür.

Gerçekten ince bir şekilde farklı mıdırlar?

Farklı durumlarda, diğerinin üzerinde tercih edilmesinin bir nedeni var mı?

DSL bir üst düzey query, ve bir üst düzey filter elde edilmiştir:

GET /index/type/_search?_source 
{ 
    "query": { 
    "multi_match": { 
     "query": "my dog has fleas", 
     "fields": ["name", "keywords"] 
    } 
    }, 
    "filter": { 
    "term": {"status": 2} 
    } 
} 

DSL filtered yapı kullanılarak, sadece bir üst düzey query elde edilmiştir:

GET /index/type/_search?_source 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "multi_match": { 
      "query": "my dog has fleas", 
      "fields": ["name", "keywords"] 
     } 
     }, 
     "filter": { 
     "term": {"status": 2} 
     } 
    } 
    } 
} 
+1

http://stackoverflow.com/questions/28937819/does-it-matter-if-the-filter-is-inside-or-outside-a-filtered-query/ –

cevap

11

İlk örnek, performans açısından alt optimal olan post_filter'dur. Filtreler sorgulardan önce çalıştırılacağından filtreli sorgular tercih edilir. Tipik olarak, filtrelerinizin önce çalışmasını istiyorsunuz, çünkü puanlama belgeleri yalnızca bir boolean geçidinden/başarısızlığından daha pahalıdır. Bu şekilde, sonuç kümeniz, sorgunuzu çalıştırmadan önce kısaltılır. Bir post_filter ile, sorgunuz ilk önce çalıştırılır, tüm sonuç kümesi puanlanır ve ardından sonuçlara filtre uygulanır. Üst düzey filter yönergesini 1.0 sürümünde kullanımdan kaldırılmış ve amacını ve kullanımını netleştirmek için post_filter olarak yeniden adlandırılmıştır.

arama üst düzey filtre parametresi (bunun yerine bir filtre sorgu kullanın) sonuçlar filtre birincil olarak kullanılmamalıdır belirtmek için, post_filter olarak değiştirilmiş, ancak SONRA sonuçları filtre fasetler/kümelenmeler hesaplanmıştır.

http://www.elastic.co/guide/en/elasticsearch/reference/current/_search_requests.html

+0

gör Teşekkürler Chris, bu çok yararlı. – billc

İlgili konular