1

在 Umbraco 中,我使用 Examine 在网站中进行搜索,但内容是法语的。一切正常,除了当我搜索“Français”时,它与“Francais”的结果不同。有没有办法忽略那些法语字符?我试图为 Leucene/Examine 找到一个 FrenchAnalyser,但没有找到任何东西。我使用 Fuzzy,所以即使单词不同,它也会返回结果。

这是我的搜索代码:

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());
        }
4

2 回答 2

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;
    }
}
于 2014-05-22T19:58:02.983 回答
0

尝试像下面这样使用正则表达式:

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

我已使用此模式“[^A-Za-z0-9]”将所有非字母数字字符串替换为空白。

希望能帮助到你。

于 2014-05-26T05:26:23.853 回答