2010-09-15 41 views
25

ल्यूसीन क्वेरी बनाम फ़िल्टर के बीच क्या अंतर है?लुसेन: क्वेरी और फ़िल्टर

वे दोनों टर्म वैल्यू द्वारा टर्म्रीरी फ़िल्टर जैसी समान चीजें करते हैं, फ़िल्टर मुझे लगता है कि इसी उद्देश्य के लिए है।

आप फ़िल्टर का उपयोग कब करेंगे और क्वेरी कब करेंगे?

बस Lucene पर आज से तो अवधारणा

उत्तर

8

एक Query स्पष्ट करने के लिए दस्तावेजों को खोजने के लिए एक Searcher को पारित किया जा सकता कोशिश कर रहा। एक Filter नहीं कर सकता; यह केवल Query द्वारा उत्पादित परिणामों को संशोधित कर सकता है।

एक नया Query प्रकार को लागू करने में काफी जटिल है, और Weight, Scorer, और Similarity तरह Lucene internals के रिश्ते की एक समझ की आवश्यकता है। Filter कार्यान्वयन काफी सरल हो सकता है, और IndexReader पर बिल्कुल भी बातचीत नहीं कर सकता है।

+0

हालांकि आप जो कह रहे हैं वह प्रिंसिपल में सही है, फ़िल्टर को भी खोजकर्ताओं में पास किया जा सकता है लेकिन वे अलग-अलग काम करते हैं – Khash

+0

@ खश मुझे यकीन नहीं है कि आपका क्या मतलब है। यदि आप कह रहे हैं कि 'फ़िल्टर' उदाहरण 'खोजकर्ता' (या अब केवल 'इंडेक्सशियर') को पास किए जा सकते हैं, यह सच है, लेकिन केवल' क्वेरी 'या कुछ अन्य खोज मानदंड के साथ ही। वे खुद से काम नहीं करते हैं। – erickson

17

फ़िल्टर गैर-फ़िल्टर किए गए दस्तावेज़ों के स्कोर की गणना को प्रभावित नहीं करता है।

उदाहरण के लिए निम्नलिखित डॉक्स कल्पना:

1. 
loc: "uk", "london" 
text: "i live in london, "london is the best" 

2. 
loc: "london avenue", "london street", "london" 
text: "I like the shop in london st." 

अब आप निम्न क्वेरी करना मान लीजिए: इस क्वेरी में

q=+loc:"london" +text:"london" 

डॉक 2 के स्कोर डॉक 1 की तुलना में अधिक है (क्योंकि loc की गणना दस्तावेज़ स्कोर में की जाती है)

फ़िल्टर का उपयोग करके:

q=+text:"london" f=+loc:"london" 
इस क्वेरी में

डॉक 1 के स्कोर डॉक 2.

कीजिए Solr शैली स्वरूपण लेकिन समग्र धारणा की तुलना में अधिक है स्पष्ट है।

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

0

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

आप एक फॉर्म का उपयोग कर क्वेरी भी बना सकते हैं। लेकिन आप एक फॉर्म में फ़िल्टर का उपयोग नहीं कर सकते हैं।

+3

आप किस बारे में बात कर रहे हैं? इस तरह के रूप में फ़िल्टर का उपयोग क्यों नहीं किया जा सकता है? – Dennis

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