如何在lucene 3.0.3中标记文本

时间:2016-02-10 16:16:16

标签: lucene.net

我需要将此代码从lucene.net 2.3.2翻译为3.0.3。

此代码在2.3.2中工作正常,但在3.0.3中,方法tokenStream.Next()不返回标记,而是返回布尔值。我需要了解的是当next()返回true时读取令牌对象的位置。

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();
}

1 个答案:

答案 0 :(得分:0)

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

        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);
        }