2015-03-10 10 views
39

क्या "फ़िल्टर में फ़िल्टर और फ़िल्टर" और "रूट पर क्वेरी और फ़िल्टर" के बीच कोई अंतर है?Elasticsearch फ़िल्टर किए गए प्रश्न बनाम फ़िल्टर

{ 
    "query":{ 
    "filtered":{ 
     "query":{ 
     "term":{"title":"kitchen3"} 
     }, 
     "filter":{ 
     "term":{"price":1000} 
     } 
    } 
    } 
} 

केस 2:: उदाहरण के

केस 1 के लिए

{ 
    "query":{ 
    "term":{"title":"kitchen3"} 
    }, 
    "filter":{ 
    "term":{"price":1000} 
    } 
} 

मैं इस चर्चा http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using-filter-outside-td3960119.html पाया है, लेकिन संदर्भित यूआरएल 404 है और स्पष्टीकरण थोड़ा भी मेरे लिए संक्षिप्त है।

कृपया कोई भी दस्तावेज सिखाएं या दें जो इनके बीच अंतर को इंगित कर रहा है, धन्यवाद।

+5

http://stackoverflow.com/questions/28937819/filter-inside-or-outside-filtered-query –

उत्तर

34

अंतर प्रदर्शन से संबंधित है। क्वेरी के बाद शीर्ष स्तर पर "फ़िल्टर" हमेशा निष्पादित किया जाता है। इसका मतलब है कि सभी दस्तावेजों पर क्वेरी निष्पादित की जाती है, सभी दस्तावेजों आदि के लिए स्कोर की गणना की जाती है - और केवल तभी फ़िल्टर करने वाले दस्तावेज़ों को बाहर नहीं रखा जाता है।

"फ़िल्टर" क्वेरी के साथ एक संभावना है कि ईएस इस गणना को अनुकूलित करेगा, उदाहरण के लिए पहले फ़िल्टर को निष्पादित करना, फिर दस्तावेज़ों के सीमित सेट पर क्वेरी निष्पादित करना, उन दस्तावेज़ों का परीक्षण करने पर समय बचाने, जो क्वेरी के विरुद्ध फ़िल्टर से मेल नहीं खाते हैं, और यदि वे क्वेरी से मेल खाते हैं तो उनके लिए स्कोर कंप्यूटिंग पर।

यदि आप एक ही फ़िल्टर के साथ कई प्रश्न पूछ रहे हैं, तो और भी फायदे हैं: फ़िल्टर को कैश किया जा सकता है, और प्रत्येक क्वेरी के प्रदर्शन में सुधार भी हो सकता है। यह आपके उदाहरण पर लागू होता है: "टर्म" फ़िल्टर डिफ़ॉल्ट रूप से कैश किए जाते हैं।

आप अपने विशेष उपयोग मामले के लिए इसे अनुकूलित करने के लिए "फ़िल्टर किए गए" क्वेरी (दस्तावेज़ीकरण देखें) के निष्पादन को स्पष्ट रूप से नियंत्रित कर सकते हैं।

+0

क्या आप कृपया मुझे एक फ़िल्टर किए गए प्रश्न में बता सकते हैं यदि मैं क्वेरी से पहले फ़िल्टर लिखें तो क्या यह प्रदर्शन में कोई फर्क नहीं पड़ता है या नहीं ?? –

+1

@ सुधांशुगौर क्वेरी जेएसओएन में चाबियों का क्रम परिणाम को प्रभावित नहीं करता है। आप फिल्टर रणनीति को नियंत्रित कर सकते हैं जो प्रदर्शन को प्रभावित कर सकता है हालांकि: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filter_strategy –

7

दो प्रकार के फ़िल्टर को पूर्व और पोस्ट फ़िल्टर के रूप में भी संदर्भित किया जा सकता है। जैसा कि @alexey समझाया गया है, रूट स्तर फ़िल्टर क्वेरी के बाद किया जाता है और फ़िल्टर किए गए क्वेरी में फ़िल्टर क्वेरी से पहले किया जाता है।

इसके अतिरिक्त आपको उसी आदेश के प्रभाव को समझने की आवश्यकता है, फिर उन्हें निष्पादित किया गया आदेश। "फ़िल्टर किए गए" क्वेरी में फ़िल्टर क्वेरी स्कोप के अंतर्गत आता है जिसका अर्थ है कि एकत्रीकरण की गणना करते समय फ़िल्टर किए गए आउटपुट पर विचार किया जाएगा जबकि रूट स्तर फ़िल्टर एग्रीगेशन केवल फ़िल्टर को छोड़कर क्वेरी के परिणामों पर ही किया जाएगा। हालांकि दोनों मामलों में परिणाम दस्तावेज़ समान होंगे।

उदाहरण के लिए आपके द्वारा पोस्ट किए गए दो प्रश्नों के साथ, दोनों एक ही परिणाम देंगे, लेकिन यदि आप एकत्रीकरण कर रहे हैं तो पहली क्वेरी शीर्षक रसोई 3 और मूल्य 10000 से मेल खाने वाले दस्तावेज़ों से एकत्रीकरण गिनती की गणना करेगी जबकि दूसरी क्वेरी एकत्रीकरण गणना की गणना करेगी कीमत 1000 के फ़िल्टर के बिना शीर्षक रसोई 3 से मेल खाने वाले दस्तावेजों से।

+1

"फ़िल्टर किए गए क्वेरी में फ़िल्टर किया जाता है पूछताछ से पहले "- जरूरी नहीं है –

संबंधित मुद्दे