我将 Lucene .Net 4.8 与以下分析器一起使用:
private static Analyzer CreateAnalyzer()
{
return Analyzer.NewAnonymous(createComponents: (fieldName, reader) =>
{
var source = new WhitespaceTokenizer(Lucene.Net.Util.LuceneVersion.LUCENE_48, reader);
TokenStream result = new WordDelimiterFilter(Lucene.Net.Util.LuceneVersion.LUCENE_48, source,
~WordDelimiterFlags.STEM_ENGLISH_POSSESSIVE,
CharArraySet.EMPTY_SET);
result = new LowerCaseFilter(Lucene.Net.Util.LuceneVersion.LUCENE_48, result);
return new TokenStreamComponents(source, result);
});
}
Run Code Online (Sandbox Code Playgroud)
这适用于我 95% 的用例。例如,对于句子“Hello MacDonald”,以下所有内容都将返回一个匹配项:“Hello”、“mac”、“dona”。
我的问题来自这样的电子邮件:“JoshSmith@microsoft.com”
当前搜索“Microsoft”或“com”将返回匹配项。但是,由于我的 WordDelimiterFilter 在 '.' 处停止,搜索“microsoft.com”不会返回匹配项。
最理想的是,我想同时索引“microsoft.com”和“com”,因此搜索两者都会返回匹配项。我愿意让 Lucene 处理 dot '.' 作为常规字符并仅索引“microsoft.com”。
我尝试在最后一个参数而不是“CharArraySet.EMPTY_SET”中写入以下内容:
new CharArraySet(Lucene.Net.Util.LuceneVersion.LUCENE_48, new List<string>() { "." }, true)
Run Code Online (Sandbox Code Playgroud)
没有帮助。
任何人都可以帮忙吗?