我正在使用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();
使用令牌流的消费者方法具有以下代码。
tokenStream = highlightAnalyzer.tokenStream(field, new CharArrayReader(text, textOffset, textLength));
tokenStream.reset();//**then itrate through the tokens.**
让我知道我的调试代码中缺少什么。据我了解stream.reset()方法,只是重置流到开始。我的使用者代码也在做这件事,以确保它从一开始就消耗流。在调试代码中,我尝试了是否重置流,但仍然无法按预期方式工作。