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;
}
看起來像相同的類正在被重用。說得通。
您應該發佈自己的答案,並將其標記爲接受。這個問題仍然是Lucene未解決的問題之一。 –
我在這幾年回來了,現在我不記得我爲修復做了什麼。 :( – Jithin