2011-10-01 8 views
5

जोड़ने के बाद केवल पहला दस्तावेज़ अनुक्रमणित कर रहा है मैंने एक कस्टम टोकन फ़िल्टर बनाया जो धारा में सभी टोकन को जोड़ता है। यह मेरा incrementToken() समारोहसोलर (ल्यूसीन) एक कस्टम टोकनफिल्टर

public boolean incrementToken() throws IOException {       
    if (finished) {               
     logger.debug("Finished");           
     return false;              
    }                  
    logger.debug("Starting");            
    StringBuilder buffer = new StringBuilder();        
    int length = 0;               
    while (input.incrementToken()) {           
     if (0 == length) {             
      buffer.append(termAtt);           
      length += termAtt.length();          
     } else {                
      buffer.append(" ").append(termAtt);        
      length += termAtt.length() + 1;         
     }                 
    }                  
    termAtt.setEmpty().append(buffer);          
    //offsetAtt.setOffset(0, length);          
    finished = true;               
    return true;                
} 

मैं सूचकांक और एक क्षेत्र के लिए क्वेरी विश्लेषण श्रृंखला के अंत करने के लिए नए फिल्टर जोड़ा गया है और http://localhost:8983/solr/admin/analysis.jsp से फिल्टर का परीक्षण कर काम कर रहा है है। फ़िल्टर स्ट्रीम में टोकन को जोड़ रहा है। लेकिन दस्तावेज़ों को फिर से अनुक्रमणित करने पर ही मेरा पहला दस्तावेज़ अनुक्रमित हो रहा है।

इस प्रकार मेरी फ़िल्टर श्रृंखला कैसी दिखती है।

 <analyzer type="index">            
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[-_]" replacement=" " /> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^\p{L}\p{Nd}\p{Mn}\p{Mc}\s+]" replacement="" /> 
      <tokenizer class="solr.WhitespaceTokenizerFactory" />   
      <filter class="solr.LowerCaseFilterFactory" />     
      <filter class="solr.StopWordFilterFactory" ignoreCase="true"    words="words.txt" /> 
      <filter class="org.custom.solr.analysis.ConcatFilterFactory" /> 
     </analyzer>               
     <analyzer type="query">            
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[-_]" replacement=" " /> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^\p{L}\p{Nd}\p{Mn}\p{Mc}\s+]" replacement="" /> 
      <tokenizer class="solr.WhitespaceTokenizerFactory" />   
      <filter class="solr.LowerCaseFilterFactory" />     
      <filter class="solr.StopWordFilterFactory" ignoreCase="true"    words="words.txt" /> 
      <filter class="org.custom.solr.analysis.ConcatFilterFactory" /> 
     </analyzer> 

ConcatFilterFactory सभी शब्दों के बिना समुचित रूप से सूचीबद्ध हो रहे हैं लेकिन ConcatFilterFactory के साथ ही पहले दस्तावेज़ अनुक्रमित हो रही है। मैं क्या गलत कर रहा हूं? कृपया समस्या को समझने में मेरी मदद करें।

अद्यतन:

अंत में इस मुद्दे को पता लगा।

if (finished) {               
    logger.debug("Finished"); 
    finished = false;         
    return false;              
} 

ऐसा लगता है कि एक ही कक्षा का पुन: उपयोग किया जा रहा है। समझ में आता है।

+0

आपको अपना उत्तर पोस्ट करना चाहिए और इसे स्वीकार किए जाने के रूप में चिह्नित करना चाहिए। यह सवाल अभी भी लुसीन के लिए शीर्ष अनुत्तरित प्रश्नों में से एक के रूप में दिखाई देता है। –

+0

मैंने इस साल पहले काम किया था और अब मुझे याद नहीं है कि मैंने ठीक से क्या किया है। :( – Jithin

उत्तर

0

आपको अपने फ़िल्टर के लिए यूनिट परीक्षण लिखना चाहिए। यदि आपका विश्लेषण काम करता है तो भी यह असफल होना चाहिए। स्पष्ट रूप से आप झूठी लौटने से पहले इस पंक्ति को जोड़ना भूल गए:

finished = false;