Игнорировать специальные символы в Examine

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

person VinnyG    schedule 23.01.2014    source источник
comment
Я знаю, что не буду очень полезен, но, если есть способ, вы можете преобразовать все специальные символы в обычные символы в содержимом, которое вы ищете.   -  person provençal le breton    schedule 23.01.2014
comment
не совсем, я уже думал об этом, но спасибо   -  person VinnyG    schedule 24.01.2014
comment
Почему нельзя сделать замену символов? Я действительно не вижу другого выхода. Предполагая, что вы уже проверили все перегрузки методов.   -  person Jevgeni Geurtsen    schedule 22.05.2014
comment
Проблема не в том, что я ищу Français, а в том, что когда я ищу Francais без специального символа. Я не получаю никакого результата. Похоже, индекс построен со специальными символами, но он должен возвращать результат, даже если я ищу слово без специальных символов.   -  person VinnyG    schedule 22.05.2014


Ответы (2)


В итоге мы использовали собственный анализатор, основанный на 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;
    }
}
person Charles Ouellet    schedule 22.05.2014

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

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

Я использовал этот шаблон «[^A-Za-z0-9]», чтобы заменить всю небуквенно-цифровую строку пробелом.

Надеюсь, поможет.

person Israel Ocbina    schedule 26.05.2014
comment
Спасибо, Израиль, но проблема в другом: lucente.net индексирует весь контент с ç, и когда я выполняю поиск по c, я хочу, чтобы результаты включали контент с ç. - person VinnyG; 26.05.2014