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

时间:2017-09-20 08:20:21

标签: 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);
    });
}

这对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)

没有帮助。

有人可以帮忙吗?

0 个答案:

没有答案