2009-06-10 14 views
5

के साथ डिफ़ॉल्ट संयोजन को कैसे बदलें मेरे पास ल्यूसीन का उपयोग करके कुछ कोड है जो डिफ़ॉल्ट संयोजन ऑपरेटर को OR के रूप में छोड़ देता है, और मैं इसे और बदलना चाहता हूं। कुछ कोड सिर्फ एक सादा क्वेरीपर्स का उपयोग करते हैं, और यह ठीक है - मैं बस उन उदाहरणों पर setDefaultOperator को कॉल कर सकता हूं।ल्यूसीन मल्टीफिल्ल्डक्वायर पार्सर

दुर्भाग्य से, एक ही स्थान पर कोड एक MultiFieldQueryParser का उपयोग करता है, और स्थिर "पार्स" विधि कॉल (स्ट्रिंग ले रही है, String [], BooleanClause.Occur [], विश्लेषक), तो ऐसा लगता है कि setDefaultOperator मदद नहीं कर सकता, क्योंकि यह एक उदाहरण विधि है।

क्या एक ही पार्सर का उपयोग जारी रखने का कोई तरीका है लेकिन डिफ़ॉल्ट संयोजन बदल गया है?

उत्तर

8

MultiFieldQueryParser कक्षा QueryParser कक्षा बढ़ाती है। शायद आप अपने स्थिर तरीकों पर भरोसा करने के बजाय बस इस वर्ग का एक उदाहरण कॉन्फ़िगर कर सकते हैं? यदि आपको वास्तव में BooleanClause.Occur मानों को कॉन्फ़िगर करने की आवश्यकता है, तो आप इसे बाद में कर सकते हैं।

String queryString = ...; 
String[] fields = ...; 
Analyzer analyzer = ...; 

MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, analyzer); 
queryParser.setDefaultOperator(QueryParser.Operator.AND); 

Query query = queryParser.parse(queryString); 

// If you're not happy with MultiFieldQueryParser's default Occur (SHOULD), you can re-configure it afterward: 
if (query instanceof BooleanQuery) { 
    BooleanClause.Occur[] flags = ...; 
    BooleanQuery booleanQuery = (BooleanQuery) query; 
    BooleanClause[] clauses = booleanQuery.getClauses(); 
    for (int i = 0; i < clauses.length; i++) { 
     clauses[i].setOccur(flags[i]); 
    } 
} 
+0

यह अच्छा धन्यवाद है। गायब कदम यह था कि बाद में ओकुर मानों को कैसे कॉन्फ़िगर करें। एक अन्य दृष्टिकोण जिसके साथ मैं बात कर रहा हूं वह यह है कि MultiFieldQueryParser.parse के लिए कोड छोटा है, इसलिए मैं इसे अपने एप्लिकेशन में पेस्ट कर सकता हूं और इसे संशोधित कर सकता हूं। यह QueryParser उदाहरण स्वयं बनाता है, इसलिए मैं इसे डिफ़ॉल्ट ऑपरेटर सेट करने के लिए बस इसे ट्विक कर सकता हूं। –

+0

लूप के लिए पुनरावृत्त के भीतर, आप प्रति फ़ील्ड संयोजन को बदलने के लिए निम्नलिखित का भी उपयोग कर सकते हैं: क्वेरीरीसर पार्सर = नया क्वेरीपर्सर (संस्करण .YOUR_VERSION, फ़ील्ड [i], नया आपका विश्लेषक()); parser.setDefaultOperator (QueryParser.Operator.and); clause.setQuery (parser.parse (clause.getQuery()। ToString (फ़ील्ड [i]))); – Ina

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