Sitecore lucene греческий поиск чувствителен к акценту?

В стандартной установке Sitecore 8 у меня есть корзина с несколькими предметами. Когда я выполняю запрос поиска контента в поле RTE на греческом языке, кажется, что Sitecore обрабатывает поисковый запрос чувствительным образом, что неправильно для греческого языка.

Может ли кто-нибудь указать мне правильное направление, чтобы сделать акцент индекса нечувствительным для греческого?

2 ответа

Решение

Похоже, проблема заключалась в том, как Sitecore понимает культуры и назначает контекст выполнения культур для своих запросов и индексов.

Для конкретного решения мы переименовали язык "el-GR" в "el" (чтобы показать "приятно" в URL). В свою очередь, Sitecore присваивал CultureInfo с именем "el", а не "el-GR". Но в конфигурационном файле defaultIndexConfiguration анализатор на греческом языке будет назначен только в том случае, если CultureInfo для CultureExecutionContext был el-GR, поэтому данные были фактически проиндексированы с использованием StandardAnalyzer, а не GreekAnalyzer, следовательно, чувствительность к акценту.

Мы добавили дополнительную конфигурацию, чтобы охватить случай, когда CultureInfo имеет имя "el" (фактически скопировал узел конфигурации "el-GR"), и после необходимой перестройки индекса все было в порядке.

Хотя довольно непонятно, почему Sitecore пошел бы и изменил имя объекта CultureInfo...

Вы хотите изменить свой анализатор. Для этого случая на ум приходят два хороших варианта:

  • использование org.apache.lucene.analysis.el.GreekAnalyzer, Это сделает то, что вы просите, а также добавит греческий язык. Это, вероятно, лучший вариант, если вы действительно не хотите, чтобы остановить.

  • Создайте собственный анализатор, который использует GreekLowerCaseFilter вместо стандартного строчного фильтра. Этот фильтр удаляет диакритические знаки и тому подобное, поэтому я считаю, что он будет делать то, что вы ищете:

    public class StandardWithGreekLower extends StopwordAnalyzerBase{
        public StandardWithGreekLower() {
        }
    
        @Override
        protected TokenStreamComponents createComponents(final String fieldName) {
            StandardTokenizer src = new StandardTokenizer();
            TokenStream filter = new StandardFilter(src);
            filter = new GreekLowerCaseFilter(filter);
            //If you want to add a stop filter, this would be a good place for it
            return new TokenStreamComponents(src, filter);
        }
    }
    
Другие вопросы по тегам