我正在使用Lucene制作搜索工作网站,并应对此类问题。我需要搜索C#,。net,所以我需要使用WhiteSpaceAnalyzer,但如果我使用它,搜索将是大小写的。
我怎样才能使这个案例不敏感?现在我看到只有一个解决方案是制作自己的分析器。但我是Lucene的新手,请你帮我一些代码示例。我做了一些我认为必须工作的东西,但事实并非如此。看看
public sealed class NewWhitespaceAnalyzer : Analyzer
{
public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
{
return new LowerCaseFilter(new WhitespaceTokenizer(reader));
}
public override TokenStream ReusableTokenStream(System.String fieldName, System.IO.TextReader reader)
{
Tokenizer tokenizer = (Tokenizer)GetPreviousTokenStream();
if (tokenizer == null)
{
tokenizer = new WhitespaceTokenizer(reader);
SetPreviousTokenStream(tokenizer);
}
else
tokenizer.Reset(reader);
return tokenizer;
}
}
如果你在这里看到错误,请纠正我。
如果您有任何其他建议,那么您将会成功。
感谢您的帮助, 迪马。
答案 0 :(得分:3)
试试这个:
public sealed class NewWhitespaceAnalyzer : Analyzer
{
public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
{
return new LowerCaseFilter(new WhitespaceTokenizer(reader));
}
public override TokenStream ReusableTokenStream(System.String fieldName, System.IO.TextReader reader)
{
SavedStreams streams = (SavedStreams) GetPreviousTokenStream();
if (streams == null)
{
streams = new SavedStreams();
SetPreviousTokenStream(streams);
streams.tokenStream = new WhiteSpaceTokenizer(reader);
streams.filteredTokenStream = new LowerCaseFilter(streams.tokenStream);
}
else
{
streams.tokenStream.Reset(reader);
}
return streams.filteredTokenStream;
}
}
答案 1 :(得分:0)
有两点:
也在LowerCaseFilter
方法中使用ReusableTokenStream
。
不要忘记在查询解析和文档索引中使用此自定义Analyzer
。
享受。