在 Lucene .Net 4.8 中,需要一个不会在点 '.' 上拆分(定界)单词的分析器。

Mic*_*_S_ 5 lucene lucene.net

我将 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)

没有帮助。

任何人都可以帮忙吗?