2013-07-22 3 views
8

जब मैं इस तरह के Lucene के भीतर "वैकल्पिक हल/ठीक" के रूप में कुछ के लिए खोज करने के लिए प्रयास करते हैं, यह इस त्रुटि फेंकता है:Lucene queryparser

:

org.apache.lucene.queryparser.classic.ParseException: Cannot parse 'workaround/fix': Lexical error at line 1, column 15. Encountered: <EOF> after : "/fix" 
    at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:131) 
    at pi.lucengine.LucIndex.main(LucIndex.java:112) 
Caused by: org.apache.lucene.queryparser.classic.TokenMgrError: Lexical error at line 1, column 15. Encountered: <EOF> after : "/fix" 
    at org.apache.lucene.queryparser.classic.QueryParserTokenManager.getNextToken(QueryParserTokenManager.java:1133) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_scan_token(QueryParser.java:599) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_3R_2(QueryParser.java:482) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_3_1(QueryParser.java:489) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_2_1(QueryParser.java:475) 
    at org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:226) 
    at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:181) 
    at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:170) 
    at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:121) 

यह मेरा लाइनों 111 और 112 हैं

QueryParser parser = new QueryParser(Version.LUCENE_43, field, analyzer); 
Query query = parser.parse(newLine); 

क्या मैं इसे "/" पार्स करने के लिए अनुमति देने के लिए क्या करने की जरूरत है?

उत्तर

14

क्वेरी पार्सर प्रारंभ/अंत या रेगेक्स क्वेरी के रूप में स्लैश की व्याख्या करता है (4.0 के रूप में, documentation here देखें)।

तो, क्वेरी में स्लेश को शामिल करने के लिए, आपको बैकस्लैश (\) जोड़कर escape them की आवश्यकता होगी।

आप QueryParser.escape(String) से बचने में संभाल सकते हैं।

2

लोचदार खोज किबाना डैशबोर्ड से जारी ल्यूसीन प्रश्नों में '/' का उपयोग करते समय मुझे एक ही समस्या का सामना करना पड़ा। मैं प्रलेखन में संकेत के रूप में '/' वर्णों से बच रहा था और अभी भी कोई सफलता नहीं मिली है। मुझे लगता है कि यह यहां रिपोर्ट की गई टेम्पलेट बग से संबंधित है: https://github.com/elastic/kibana/issues/789। सुनिश्चित नहीं हैं कि अभी तक, जब हम logstash घटकों

0

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

+(*16/17*) 
+(*16\/17*) 

समाधान डबल कोट जोड़ने के लिए था:

+("*16/17*") 
+("*16\/17*") 
संबंधित मुद्दे