Я использую Lucene для генерации токенов для моего поискового приложения.Когда я использую приведенный ниже код для генерации токенов, которые используются другим способом, он прекрасно работает.
public TokenStream tokenStream(String fieldName, Reader reader) {
TokenStream stream = new StandardTokenizer(version, reader);
stream = new EdgeNGramTokenFilter(stream, EdgeNGramTokenFilter.Side.FRONT, 1, 30);
}
Я использую версию Lucene 3.6.Но для целей отладки, чтобы увидеть токены, сгенерированные приведенным выше кодом, я добавляю приведенный ниже дополнительный код, он сгенерировал правильный токен, но в моем другом методе, который использует его, он не работает должным образом.
CharTermAttribute charTermAttribute = stream.addAttribute(CharTermAttribute.class);
while (stream.incrementToken()) {
String term = charTermAttribute.toString();
log.trace(" " + term);
}
stream.reset();
stream.close();
Myпотребительский метод, который использует поток токенов, имеет следующий код:
tokenStream = highlightAnalyzer.tokenStream(field, new CharArrayReader(text, textOffset, textLength));
tokenStream.reset();//**then itrate through the tokens.**
Дайте мне знать, что мне не хватает, в моем коде отладки.Как я понимаю, метод stream.reset () просто сбрасывает поток в начало.что мой потребительский код также делает, чтобы убедиться, что он потребляет поток с самого начала.В моем отладочном коде я пытался переустанавливать поток и без него, но он все еще не работает должным образом.