Я пытался реализовать собственный анализатор в Lucene. Я думаю, что я действительно близок к завершению, но я сталкиваюсь с двумя странными проблемами.
Во-первых, мой фильтр работает, как и ожидалось, для каждого термина в потоке токенов, кроме последнего. (Хотя я пытаюсь справиться с этим).
Во-вторых, у меня не будет проблем с использованием этого TokenFilter (даже если пропущен последний термин). Но хотя индексация работает отлично (проверил полученный индекс с помощью Luke), когда я пытаюсь использовать свой анализатор для анализа пользовательских запросов = полученный запрос пустой (!) Может ли это быть из-за пропущенного термина?
Я разместил метод incrementToken () фильтра ниже. Любая помощь будет очень кстати. Заранее спасибо.
P.S. Я теперь, что с точки зрения вклада этот вопрос не является хорошим, но я не мог найти что-то конкретное в другом месте.
public boolean incrementToken() throws IOException {
if (!input.incrementToken()) {
if (previousTokenFlag) {
tempPreviousToken.attSource.copyTo(this);
previousTokenFlag = false;
this.incrementToken();
return false;
} else {
return false;
}
}
if (previousTokenFlag) {
if (CheckIfMainName(this.termAtt.term())) {
if (CheckIfMainName(tempPreviousToken.termAtt.term())) {
termAtt.setTermBuffer(tempPreviousToken.termAtt.term() +
TOKEN_SEPARATOR + this.termAtt.term());
this.setPreviousTokenFlag(false);
return true;
} else {
tempHelpingToken = new TempToken(this.input.cloneAttributes());
}
tempPreviousToken.attSource.copyTo(this);
tempHelpingToken.attSource.copyTo(tempPreviousToken.attSource);
return true;
} else {
if (CheckIfMainName(tempPreviousToken.termAtt.term())) {
tempHelpingToken = new TempToken(this.input.cloneAttributes());
tempPreviousToken.attSource.copyTo(this);
tempHelpingToken.attSource.copyTo(tempPreviousToken.attSource);
tempHelpingToken.attSource.clearAttributes();
return true;
} else {
tempHelpingToken = new TempToken(this.input.cloneAttributes());
tempPreviousToken.attSource.copyTo(this);
tempHelpingToken.attSource.copyTo(tempPreviousToken.attSource);
tempHelpingToken.attSource.clearAttributes();
return true;
}
}
} else {
tempPreviousToken = new TempToken(this.input.cloneAttributes());
tempPreviousToken.termAtt.setTermBuffer(this.termAtt.term());
this.setPreviousTokenFlag(true);
this.incrementToken();
return true;
}
}