Итак, я создаю поисковую систему для сайта, используя Zend_Search_Lucene
В настоящее время я использую Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive, который отлично работает, за исключением одной вещи: он делает различия между акцентированными и не акцентированными символами
В google (и других поисковых системах) при поиске «χιονι» будут возвращаться результаты для всех его вариантов, например «χιόνι», что является правильной версией с ударением на греческом языке (χιόνι = snow btw). В lucene (в общем, не только Zend_Search_Lucene) это не стандартное или даже связанное поведение из того, что я видел
Моя первая попытка найти решение было сделать то, что делает lucene для поиска без учета регистра - анализаторы, удалять акценты с букв так же, как анализаторы без учета регистра просто делают все строчными при индексации и поиске (то есть $ str = strtr ($ ул, 'ό', 'о'))
Единственная причина, по которой это не удалось, заключается в том, что php не имеет mb_strtr и strtr не работает для многобайтовых символов, подобных этому, и preg_replace просто не работает либо
Есть ли способ сделать поиск lucene в "нечувствительном к акценту" режиме (вероятно, анализатором) или альтернативный способ неакцентировать многобайтовые символы в php (я также выполнил поиск по этому вопросу без результатов)?
Имейте в виду, что я хочу искать не западноевропейские акцентированные символы, для которых есть несколько неприличных решений для php в сети