如何正确重置lucene TokenStream类中的流

时间:2018-09-17 05:01:44

标签: elasticsearch lucene tokenize

我正在使用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()方法,只是重置流到开始。我的使用者代码也在做这件事,以确保它从一开始就消耗流。在调试代码中,我尝试了是否重置流,但仍然无法按预期方式工作。

0 个答案:

没有答案