Akıştaki tüm belirteçleri birleştiren özel bir belirteç filtresi oluşturdum. Bu Solr (Lucene) özel bir TokenFilter ekledikten sonra yalnızca ilk belgeyi dizine ekliyor
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;
}
Bir alan için endeks ve sorgu analizi zincirinin sonuna yeni Filtre eklenmiş ve
http://localhost:8983/solr/admin/analysis.jsp Filtreyi test çalışıyor görünüyor benim
incrementToken()
fonksiyonudur. Filtre, akıştaki belirteçleri birleştiriyor. Ancak belgeleri yeniden indekslemede sadece ilk belgem indeksleniyor.
Filtre zincirim nasıl görünür. ConcatFilterFactory
tüm kelimeler olmadan
<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>
düzgün dizine alıyorsanız ancak ConcatFilterFactory
sadece ilk belge endeksli oluyor. Neyi yanlış yapıyorum? Lütfen problemi anlamada bana yardımcı olun.
GÜNCELLEME:
Son olarak konuyu anladım.
Aynı sınıfın yeniden kullanılmakta olduğu anlaşılıyor. Mantıklı.
Kendi yanıtınızı yazmalı ve kabul edildi olarak işaretlemelisiniz. Bu soru hala Lucene için en iyi cevaplanmamış sorulardan biri olarak ortaya çıkıyor. –
Bu yıllarda çalıştım ve şimdi tam da ne için yaptığımı hatırlayamıyorum. :( – Jithin