Lucene.Net不区分大小写的关键字分析器ReusableTokenStream

本文关键字:关键字 分析器 ReusableTokenStream 大小写 Net 不区 Lucene | 更新日期: 2023-09-27 18:20:41

正如标题所说,我需要一个Lucene.Net大小写不敏感的关键字分析器。

我想出了这个。。。

using Lucene.Net.Analysis;
namespace LuceneTools
{
  public sealed class LowerCaseKeywordAnalyzer :Analyzer
  {
    public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
    {
        return new LowerCaseFilter(new KeywordTokenizer(reader));
    }
    public override TokenStream ReusableTokenStream(System.String fieldName, System.IO.TextReader reader)
    {
        return new LowerCaseFilter(new KeywordTokenizer(reader));
    }
  }
}

尽管上面的代码似乎可以工作,但我真的不明白我应该用ReusableTokenStream做什么不同的事情?我想上面的很糟糕,但我不确定如何/为什么或该怎么办。也许我根本不应该覆盖它,但如果我不覆盖,使用该路由的代码会发生什么?

Lucene.Net不区分大小写的关键字分析器ReusableTokenStream

您所拥有的实际上等同于不实现ReusableTokenStream。以下是Analyzer源代码(java):

public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
    return tokenStream(fieldName, reader);
}

因此,您的实现不会比默认实现做得更糟。

ReuseableTokenStream的目的是通过不必每次调用它时都重新创建所有内容来提高性能,通常是通过尝试reset()最后一个流,如果失败,则只需调用tokenStream。显然,您的实现并不能真正做到这一点。