2014-01-23 4 views
1

Umbraco에서 Examine을 사용하여 웹 사이트에서 검색하지만 내용은 프랑스어로되어 있습니다. "Français"를 검색 할 때를 제외하고는 모두 "Francais"와 같은 결과가 아닙니다. 그 프랑스어 문자를 무시할 수있는 방법이 있습니까? 나는 Leucene/Examine을 위해 FrenchAnalyser를 찾으려고 노력했지만 아무 것도 발견하지 못했습니다. Fuzzy를 사용하므로 단어가 같지 않아도 결과를 반환합니다. 여기 Exam에서 특수 문자 무시

내 검색 코드입니다 :

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