我正在使用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);
});
}
这对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)
没有帮助。
有人可以帮忙吗?