2014-01-23 3 views
1

В Umbraco я использую Examine для поиска на веб-сайте, но содержимое находится на французском языке. Все работает отлично, за исключением случаев, когда я ищу «Français», это не тот же результат, что и «Francais». Есть ли способ игнорировать этих французских персонажей? Я пытаюсь найти FrenchAnalyser для 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

Мы закончили с помощью пользовательского analyer на основе 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

Попробуйте использовать Regex, как это показано ниже:

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

Смежные вопросы