在“检查”中忽略特殊字符

时间:2014-01-23 15:33:37

标签: c# umbraco lucene.net examine

在Umbraco,我使用Examine在网站上搜索,但内容是法语。一切正常,除非我搜索“Français”时,它与“Francais”的结果不一样。有没有办法忽略那些法国人?我试图为Leucene / Examine找到FrenchAnalyser,但没有找到任何东西。我使用模糊,因此即使单词不相同也会返回结果。

以下是我的搜索代码:

public static ISearchResults Search(string searchTerm)
        {
            var provider = ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"];
            var criteria = provider.CreateSearchCriteria(BooleanOperation.Or);

            var crawl = criteria.GroupedOr(BoostedSearchableFields, searchTerm.Boost(15))
            .Or().GroupedOr(BoostedSearchableFields, searchTerm.Fuzzy(Fuzziness))
            .Or().GroupedOr(SearchableFields, searchTerm.Fuzzy(Fuzziness))
            .Not().Field("umbracoNavHide", "1");

            return provider.Search(crawl.Compile());
        }

2 个答案:

答案 0 :(得分:1)

我们最终使用基于SnowballAnalyzer

的自定义分析器
public class CustomAnalyzer : SnowballAnalyzer
{
    public CustomAnalyzer() : base("French") { }

    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        TokenStream result = base.TokenStream(fieldName, reader);

        result = new ISOLatin1AccentFilter(result);

        return result;
    }
}

答案 1 :(得分:0)

尝试使用如下所示的Regex:

var strInput ="Français";
var strToReplace = string.Empty;
var sNewString = Regex.Replace(strInput, "[^A-Za-z0-9]", strToReplace);

我使用这种模式“[^ A-Za-z0-9]”用空格替换所有非字母数字字符串。

希望它有所帮助。