2014-01-23 126 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