2012-04-26 13 views
5

जब मैंने एक प्रश्न "राज्य: या" ल्यूसीन ने एक त्रुटि में पारित किया क्योंकि यह "OR" को बूलियन खंड के लिए कीवर्ड मानता है, लेकिन यहां मैं वास्तव में ओरेगन, राज्य का संक्षिप्त नाम मानता हूं।कैसे ल्यूसीन क्वेरी में ठीक से बचें या और कैसे?

मैंने यह उद्धरण देखा है या इसलिए क्वेरी 'राज्य:' हो जाती है या "यह काम करती है।

लेकिन यह बहुत अच्छा दृष्टिकोण की तरह नहीं लगता है, क्योंकि मुझे ल्यूसीन के उन सभी कीवर्ड के लिए एक स्ट्रिंग प्रतिस्थापन करना होगा: और नहीं और अन्य ?? मुझे नहीं लगता कि

मैंने queryParser.parse() करने के बजाय क्वेरी को सीधे बनाने का प्रयास किया, लेकिन ऐसा लगता है कि यह विश्लेषकों के माध्यम से नहीं जाता है, जो एक बड़ी समस्या है।

+0

आप मैन्युअल रूप से क्वेरी बनाने से पहले शब्द का विश्लेषण कर सकते हैं – jpountz

उत्तर

3

Lucene query syntax - और, OR, और नहीं में केवल 3 स्टैंडअलोन कीवर्ड हैं। ("TO" का भी उपयोग किया जाता है, लेकिन केवल एक श्रेणी क्वेरी के अंदर पहचाना जाता है।)

इससे मदद मिल सकती है कि आपके उद्धरण कोड को केवल आपके आवेदन में शर्तों के रूप में उपयोग किए जाने वाले लुसेन कीवर्ड को पहचानने की आवश्यकता है (जैसे "OR" आपके उदाहरण में ऊपर)।

4

तरीके इस से बचने के लिए की एक संख्या हैं, क्लीनर से बचने के लिए किया जाता है और, या, & नहीं के साथ अग्रणी बैकस्लैश जैसे:

\\AND \\OR \\NOT

बारी-बारी से, कोड पार्सर उनके लोअरकेस समकक्ष पार्स नहीं होंगे ऑपरेटर

+0

तो मैं इस 'searchTerm.replaceAll ("\\ b (AND | OR | NOT) \\ b", "\\\\\" \\\ $ 1 ");' एक शाब्दिक से बचने के लिए और उपयोगकर्ता में इस्तेमाल किए गए खोज बॉक्स में प्रवेश किया जो आखिरकार एक सोलर क्वेरी में समाप्त होता है - डब्ल्यू मुझे लगता है कि टोपी यह था कि \ N कार्यों से पूर्व-लंबित है और इसमें काम करता है कि अब एक पार्स अपवाद नहीं है लेकिन यह वास्तव में शाब्दिक स्ट्रिंग की खोज नहीं करता है। सोलर में बोलें, पैरामीटर 'नाम: \\ AND' किसी क्वेरी में कोई परिणाम नहीं मिलता है जब इसे "जिम और जॉन" नाम से प्रविष्टियां वापस करनी होंगी। लोअर केस कम से कम सोलर में जाने का रास्ता हो सकता है! – icyitscold

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