Ho creato un filtro token personalizzato che concatena tutti i token nel flusso. Questa è la mia funzione incrementToken()
Solr (Lucene) sta indicizzando solo il primo documento dopo aver aggiunto un TokenFilter personalizzato
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;
}
ho aggiunto il nuovo filtro al fine di indice e catena di analisi query per un campo e test del filtro dal http://localhost:8983/solr/admin/analysis.jsp sembra funzionare. Il filtro concatena i token nel flusso. Ma sul reindicizzare i documenti solo il mio primo documento viene indicizzato.
Ecco come appare la mia catena di filtri.
<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>
Senza le ConcatFilterFactory
tutte le parole siano sempre indicizzati correttamente ma con ConcatFilterFactory
è ottenere indicizzati solo il primo documento. Che cosa sto facendo di sbagliato? Gentilmente aiutami a capire il problema.
UPDATE:
finalmente capito il problema.
if (finished) {
logger.debug("Finished");
finished = false;
return false;
}
Sembra che la stessa classe venga riutilizzata. Ha senso.
Dovresti pubblicare la tua risposta e contrassegnarla come accettata. Questa domanda si presenta ancora come una delle principali domande senza risposta per Lucene. –
Ho lavorato a questi anni fa e ora non riesco a ricordare cosa ho fatto esattamente per la correzione. :( – Jithin