2013-06-20 5 views
6

निम्न फ़िल्टर क्वेरी रिटर्न शून्य परिणाम (* का उपयोग कर: * प्रश्न के रूप में):इस सौर रेंज फ़िल्टर क्वेरी के साथ क्या गलत है?

-startDate:[* TO *] OR startDate:[* TO NOW/DAY+1DAY] 

लेकिन अगर मैं द्वारा केवल फिल्टर करें:

-startDate:[* TO *] 

मैं 3 का परिणाम है।

अगर मैं द्वारा केवल फिल्टर करें:

startDate:[* TO NOW/DAY+1DAY] 

मैं 161 reults मिलता है।

संयुक्त एफक्यू शून्य परिणाम क्यों लौटा रहा है? मैं जो चाहता हूं वह फ़िल्टर किसी भी दस्तावेज़ को वापस करने के लिए है जिसकी प्रारंभ तिथि शून्य या प्रारंभ तिथि है।

संपादित करें:

मैं Solr 4.2.1.2013.03.26.08.26.55 उपयोग कर रहा हूँ

संपादित करें:

ठीक है, अजीब यह एक सहयोगी लग सकता है सुझाव पर कोष्ठक डाल इस तरह के दो भाग:

(-startDate:[* TO *]) OR (startDate:[* TO NOW/DAY+1DAY]) 

और किसी भी तरह से यह काम करता है। मैं अभी भी उत्सुक हूं कि इससे कोई फर्क क्यों पड़ता है। उम्मीद है कि कोई कुछ प्रकाश डाल सकता है।

धन्यवाद!

+0

यह http: //stackoverflow.com/questions/634765/using-or-and-not-in-solr-query से संबंधित हो सकता है .... – jmend

+0

संभावित डुप्लिकेट [दिनांक सीमा या शून्य/संख्या के लिए खोज Solr में क्षेत्र] (http://stackoverflow.com/questions/1343794/searching-for-date-range-or-null-no-field-in-solr) –

उत्तर

6

सोलर शुद्ध नकारात्मक प्रश्नों का समर्थन करता है। वे ऐसा करते हैं, अनिवार्य रूप से, की तरह कुछ करने के लिए शुद्ध नकारात्मक विस्तार करके:

*:* -startDate:[* TO *] 

हालांकि, क्या आप इसे एक BooleanQuery में गठबंधन, मैं नहीं मानता कि यह तर्क की इस तरह अब और लागू होता है। एक नकारात्मक क्वेरी, लुसीन में, कुछ भी नहीं लाती है, बल्कि अन्य, सकारात्मक, क्वेरी शर्तों द्वारा लाए गए मैचों को फ़िल्टर करती है। यह एसक्यूएल प्रश्नों से अलग है, जो एक अर्थ में एक अंतर्निहित *:*, या परिणामों की एक पूर्ण तालिका से शुरू होता है, और आपको इसे कम करने की अनुमति देता है।

मेरा मानना ​​है कि अपने OR प्रभावी रूप से अनदेखी की गई है, क्योंकि यह नहीं है, कडाई के अर्थ के संदर्भ में हैं। आम तौर पर, OR बस वाक्यात्मक चीनी है, मेरा मानना ​​है कि (field:this OR field:thatfield:this field:that के बराबर है)।

तो, प्रभाव में आपकी क्वेरी है: startDate:[* TO NOW/DAY+1DAY] -startDate:[* TO *] है, जो परिणाम आप अधिक स्पष्ट देखने में आता है। जब आप इसे कोष्ठक में लपेटते हैं, तो प्रत्येक शब्द क्वेरी का अलग से इलाज किया जाता है, और आपको अकेले नकारात्मक प्रश्नों के solr के समर्थन तक पहुंच प्राप्त होती है।


यदि आपको अनसेट/शून्य मानों की खोज करने की आवश्यकता है, तो डिफ़ॉल्ट मान को स्टोर करना एक बेहतर विचार है। *:* और विस्तार से शुद्ध नकारात्मक प्रश्नों को इस तरह की संपूर्ण अनुक्रमणिका को स्कैन करना है, और इसलिए बहुत खराब प्रदर्शन करना है। एक डिफ़ॉल्ट मान प्रदान करने से प्रदर्शन में सुधार होगा, और इस प्रकार की भ्रमित स्थिति को रोका जा सकेगा।

+0

मुझे लगता है कि यह हो रहा है। ए ने "डीबग" क्वेरी की और इसे डेटडेट करने के लिए अनुवादित किया गया है: [* अब/दिन + 1 दिन] -स्टार्टडेट: [* TO *], जो वास्तव में समझ में नहीं आता है। मुझे लगता है कि एक डिफ़ॉल्ट मान आदर्श है, लेकिन शून्य के लिए समर्थन केवल अस्थायी है जबकि अनुक्रमणिका फिर से आबादी है (गैर-शून्य मानों के साथ)। – jmend

-1

शुद्ध नकारात्मक प्रश्न काम नहीं करते हैं, क्योंकि वे कुछ भी नहीं छोड़ रहे हैं।

प्रयास करें:

: और -startDate: [* को *]

+1

कृपया ध्यान दें कि मैं एक फिल्टर यह पता लगाने की कोशिश कर रहा हूँ क्वेरी (fq param) इसलिए नकारात्मक प्रश्नों को ठीक काम करना चाहिए। – jmend

-1

जब आप -startDate:[* TO *] साथ क्वेरी आप दस्तावेज है जो startDate क्षेत्र के लिए किसी भी डेटा नहीं है मिलता है।

जब आप startDate:[* TO NOW/DAY+1DAY] के लिए पूछताछ करते हैं तो आपको startDate फ़ील्ड में NOW/DAY+1DAY से कम या उसके बराबर मान प्राप्त होते हैं।

आप -startDate:* OR startDate:[* TO NOW/DAY+1DAY] को आजमा सकते हैं। पहला भाग उन दस्तावेजों का कहना है जिनके पास मूल्य नहीं है और दूसरा भाग कहता है कि startDate फ़ील्ड में NOW/DAY+1DAY से कम या उसके बराबर दस्तावेज़ का मूल्य है।

+1

लगता है कि -startDate: * के रूप में व्यवहार करता है - प्रारंभ दिनांक: [* TO \ *] करता है। मेरा मतलब है, अगर मैं fq सेट -स्टार्टडेट सेट करता हूं: \ * मुझे 3 परिणाम मिलते हैं। अगर मैं fq as -startDate सेट करता हूं: * या startDate: [\ * अभी/दिन + 1 दिन] मुझे फिर से शून्य मिलता है। – jmend

0

मैं femtoRgon's answer का इस्तेमाल किया और एक प्रश्न है कि एक सीमा के और खाली मान शामिल का निर्माण करने में सक्षम था।

निम्नलिखित पर या 2014/01/01 के बाद एक StartDate और एक StartDate बिना सभी डॉक्स के साथ सभी डॉक्स भी शामिल है।

(StartDate:[2014-01-01T00:00:00Z TO *]) OR (-StartDate:([* TO *]) AND *:*) 

जादू (-StartDate:([* TO *]) AND *:*) है। यह स्टार्टडेट के बिना दस्तावेज़ों का चयन करेगा।

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