2015-10-30 4 views
7

मैं ल्यूसीन के लिए लगभग नया हूं और कुछ प्रश्नों की कोशिश कर रहा हूं और उन्हें प्रदर्शित करता हूं। मैंने पूरे वेब के लिए गुगल किया है, लेकिन इस समस्या का सही समाधान नहीं मिल रहा है। बूलियन क्वेरी खोज के समाधान में BooleanQuery ल्यूसीन कक्षा शामिल है। लेकिन इस वर्ग Lucene 5.3.1 (जो मैं उपयोग कर रहा हूँ) में हटाई गई है Hereलुसेन 5.3.x में एक BooleanQuery बिल्डर का उपयोग कैसे करें?

यह मेरा कोड का एक हिस्सा है:

public static void searchBooleanQuery(String indexDir, Query query1, 
             Query query2, Query query3, Query query4) throws IOException { 
    IndexReader rdr = DirectoryReader.open(FSDirectory.open(Paths.get(indexDir))); 
    IndexSearcher is = new IndexSearcher(rdr); 
    BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder(); 
    booleanQuery.add(query1, BooleanClause.Occur.MUST); 
    booleanQuery.add(query2, BooleanClause.Occur.MUST); 
    booleanQuery.add(query3, BooleanClause.Occur.MUST); 
    booleanQuery.add(query4, BooleanClause.Occur.MUST); 
} 

अद्यतन

समस्या: मैं कर सकते हैं IndexSearcher ऑब्जेक्ट द्वारा प्रदर्शित न करें, क्योंकि इस वर्ग की खोज विधि (इंडेक्सशियर) को क्वेरी द्वारा पारित किया जाना चाहिए! तो यह मुझे जब मैं इस कोड को चलाने के लिए कोशिश कर रहा हूँ एक त्रुटि देता है:

TopDocs hits = is.search(booleanQuery,10); 
... 
+0

वास्तव में आपके पास क्या समस्या है? आप क्वेरी में बस जोड़ रहे हैं ठीक है। अब सिर्फ क्वेरी बनाएं और इसे indexSearcher के साथ उपयोग करें। – user1071777

+0

मैंने अपडेट में जवाब दिया। @ user1071777 –

उत्तर

6

आपका booleanQuery वस्तु वास्तव में BooleanQuery.Builder, नहीं BooleanQuery का एक उदाहरण है।

बिल्डर को अपने सभी प्रश्न जोड़ने के बाद, आपको build विधि कॉल करने की आवश्यकता है।

पूर्व।

TopDocs hits = is.search(booleanQuery.build(),10); 
+0

धन्यवाद! बहुत काम करता है :) –

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