正如标题所说,我需要一个Lucene.Net Case Insensitive Keyword Analyzer。
我想出了这个......
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做些什么?我猜以上是坏但我不确定如何/为什么或如何处理它。也许我根本不应该覆盖它,但如果我不知道使用该路由的代码会发生什么?
答案 0 :(得分:1)
您所拥有的实际上等同于不实施ReusableTokenStream
。这是Analyzer
源代码(java):
public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
return tokenStream(fieldName, reader);
}
所以你的实现没有比默认实现更糟糕的事情。
ReuseableTokenStream
的目的是通过不必在每次调用时重新创建所有内容来提高性能,通常是尝试reset()
最后一个流,然后再回到简单地调用tokenStream
如果失败了显然,你的实现并没有真正做到这一点。