ストリーム内のすべてのトークンを連結するカスタムトークンフィルタを作成しました。これは私の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の未解決の疑問の1つです。 –
私はここ数年前に仕事をしていましたが、修正のために正確に何をしたのか覚えていません。 :( – Jithin