Я пытаюсь создать пользовательский фильтр в Lucene, который просто распознает, начинаются ли два последовательных слова в тексте с заглавной буквы, а остальные - в нижнем регистре, и в этом случае два слова должны быть объединены в один токен.
Переопределенный метод incrementToken имеет следующий код
@Override
public boolean incrementToken() throws IOException {
if(!input.incrementToken()){
return false;}
//Case were the previous token WAS NOT starting with capital letter and the rest small
if(previousTokenCanditateMainName==false)
{
if(CheckIfMainName(termAtt.term()))
{
previousTokenCanditateMainName=true;
tempString=this.termAtt.term() ; /*This is the*/
// myToken.offsetAtt=this.offsetAtt; /*Token i need to "delete"*/
tempStartOffset=this.offsetAtt.startOffset();
tempEndOffset=this.offsetAtt.endOffset();
return true;
}
else
{
return true;
}
}
//Case were the previous token WAS a Proper name (starting with Capital and continuiing with small letters)
else
{
if(CheckIfMainName(termAtt.term()))
{
previousTokenCanditateMainName=false;
posIncrAtt.setPositionIncrement(0);
termAtt.setTermBuffer(tempString+TOKEN_SEPARATOR+this.termAtt.term());
offsetAtt.setOffset(tempStartOffset, this.offsetAtt.endOffset());
return true;
}
else
{
previousTokenCanditateMainName=false;
return true;
}
}
}
Мой вопрос заключается в том, как, когда я найду первый токен, отвечающий моим требованиям, я могу его "проигнорировать".В настоящее время код отлично работает при соединении двух токенов, но я также получаю дополнительный токен с первым из двух идентифицированных мной.Я попытался использовать тот же метод setEnableIncrementsPosition (true), что и встроенный stopFilter, но в этом случае мой фильтр должен быть типа TokenFilter, который не позволяет мне переопределить метод incrementToken.
Надеюсь, я сформулировалмоя проблема правильно