2013-03-08 5 views
12

मैं Lucene 3.4 से 4.1 करने के लिए अपने कोड को अद्यतन करने के कोशिश कर रहा हूँ एक Lucene क्षेत्र के लिए सभी शर्तों प्राप्त करने के लिए। मैंने एक को छोड़कर बदलावों को समझ लिया। मेरे पास कोड है जिसे एक फ़ील्ड के लिए सभी टर्म मानों पर फिर से शुरू करने की आवश्यकता है। ल्यूसीन 3.1 में एक इंडेक्स रीडर # शब्द() विधि थी जो टर्मिनम प्रदान करती थी, जिसे मैं फिर से चालू कर सकता था। ऐसा लगता है कि लुसीन 4.1 के लिए बदल गया है और दस्तावेज़ीकरण में कई घंटों की खोज के बाद भी मैं यह समझने में सक्षम नहीं हूं कि कैसे। क्या कोई कृपया मुझे सही दिशा में अंकित कर सकता है?कैसे Lucene 4 में

धन्यवाद।

+0

मैं सिर्फ इस सवाल का जवाब आप के बाद से यह भ्रामक और खोज और प्रश्न तैयार करने में जवाब खोजने के लिए गैर सहज ज्ञान युक्त हो सकता है चिह्नित करने के लिए इस सवाल का जवाब भाग ले जाया गया के माध्यम से कर सकते हैं। – MahNas92

उत्तर

2

Lucene 4 Migration guide का पालन करें ::

आप enums कैसे प्राप्त बदल गया है। प्राथमिक प्रवेश बिंदु Fields वर्ग है। क्या आप जानते हैं आपके पाठक एक एकल खंड पाठक है, तो कर इस: पाठक बहु खंड हो सकता है

Fields fields = reader.Fields(); 
if (fields != null) { 
    ... 
} 

, तो आप इस कार्य करना होगा:

Fields fields = MultiFields.getFields(reader); 
if (fields != null) { 
    ... 
} 

fieldsnull हो सकता है (उदाहरण के लिए अगर पाठक के पास कोई फ़ील्ड नहीं है)।

ध्यान दें कि MultiFields दृष्टिकोण MultiReaders पर एक प्रदर्शन हिट जरूरत पर जोर देता है, क्योंकि यह संदर्भ/docs/मक्खी पर पदों को मर्ज करना होगा। यह आम तौर पर बजाय अनुक्रमिक पाठकों (उपयोग oal.util.ReaderUtil) प्राप्त करने के लिए और फिर अपने आप को उन पाठकों के माध्यम से कदम, यदि आप कर सकते हैं (यह कैसे Lucene ड्राइव खोज है) बेहतर है।

आप एक SegmentReaderMultiFields.fields को कहीं भी होगी बस वापसी reader.fields() गुजरती हैं, इसलिए कोई प्रदर्शन उस मामले में मारा है।

बार जब आप एक गैर-शून्य फील्ड्स है आप यह कर सकते हैं:

Terms terms = fields.terms("field"); 
if (terms != null) { 
    ... 
} 

termsnull हो सकता है (उदाहरण के लिए यदि क्षेत्र मौजूद नहीं है)।

बार जब आप एक गैर null शर्तें भी हो आप इस तरह एक enum प्राप्त कर सकते हैं:

TermsEnum termsEnum = terms.iterator(); 

लौटे TermsEnum अशक्त नहीं होगा।

फिर आप .next()TermsEnum

+11

ग्रेट माइग्रेशन मार्गदर्शिका का उल्लेख है, लेकिन मुझे लगता है कि आपका जवाब एक बहुत अधिक उपयोगी अगर तुम यहाँ बात यह है कि सवाल और है कि आप क्या करने के लिए सुझाव के लिए प्रासंगिक है पोस्ट कर सकता होगा। – javanna

+2

मैंने अभी उपरोक्त मेरे प्रश्न में प्रासंगिक हिस्सा जोड़ा है। – ali

+0

हम्म, मेरा बुरा है, मैं उस को ध्यान में रखना होगा अब से .. – phani

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