[英]Lucene custom analyzer
我正在使用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;
}
}
如果您在這里看到錯誤,請糾正我。
如有其他建議,歡迎您。
感謝您的幫助,迪瑪。
嘗試這個:
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;
}
}
有2分:
在ReusableTokenStream
方法中也使用LowerCaseFilter
。
不要忘記在查詢解析和文檔索引編制中都使用此自定義Analyzer
。
請享用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.