如何在 lucene 3.0.3 中标记文本

How to tokenize a text in lucene 3.0.3

我需要将这段代码从 lucene.net 2.3.2 翻译成 3.0.3。

此代码在 2.3.2 中运行良好,但在 3.0.3 中,方法 tokenStream.Next() 不是 return 标记而是布尔值。我需要了解的是当 next() returns 为真时在哪里读取令牌对象。

Analyzer analyzer = new StandardAnalyzer();
StringReader stringReader = new StringReader("the house id red");
TokenStream tokenStream = analyzer.TokenStream("", stringReader);
Token token = tokenStream.Next();
while (token != null)
{
 System.Diagnostics.Debug.Write(token.TermText()); 
 token = tokenStream.Next();
}

Lucene 3+ 中的 TokenStreams 现在可以表示流中每个位置的一整套值(称为属性)。因此,您需要修改您的示例以了解属性...

        var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
        var stringReader = new StringReader("the house id red");
        var tokenStream = analyzer.TokenStream(string.Empty, stringReader);
        var termAtt = tokenStream.GetAttribute<ITermAttribute>();
        while (tokenStream.IncrementToken())
        {
            Console.WriteLine(termAtt.Term);
        }