2014-01-23 130 views
1

在Umbraco中,我使用检查在网站中搜索,但内容是法语。除了当我搜索“Français”时,一切都正常,这与“Francais”不一样。有没有办法忽略这些法国人物?我试图为Leucene/Examine找到一位法国分析师,但没有发现任何东西。我使用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()); 
     } 
+0

我知道我不会很有帮助,但是,如果有办法,您可以在正在搜索的内容中将普通字符中的所有特殊字符转换。 –

+0

不是真的,我已经试过了,但是谢谢 – VinnyG

+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; 
    } 
} 
0

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

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

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

希望它有帮助。

+1

谢谢以色列,但问题是相反的方式,lucente.net索引与“ç”的所有内容,当我做一个搜索“C”我想结果包括那些与“ç”。 – VinnyG