2011-10-01 21 views
5

我創建了一個自定義令牌過濾器,它將流中的所有令牌連接起來。這是我的incrementToken()功能Solr(Lucene)在添加自定義TokenFilter後僅索引第一個文檔

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只有第一個文件獲得索引。我究竟做錯了什麼?請幫助我理解問題。

UPDATE:

終於想通了這個問題。

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

看起來像相同的類正在被重用。說得通。

+0

您應該發佈自己的答案,並將其標記爲接受。這個問題仍然是Lucene未解決的問題之一。 –

+0

我在這幾年回來了,現在我不記得我爲修復做了什麼。 :( – Jithin

回答

0

你應該爲你的過濾器編寫單元測試。即使您的分析工作正常,它也會失敗。顯然你忘了添加此行之前返回false:

finished = false; 
相關問題