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