Zend_Search_Lucene: UTF-8 безумие

У меня проблемы с Zend_Search_Lucene и неанглийскими символами, такими как немецкий ÄÖÜ. Моя база данных возвращает строки в формате UTF-8, поэтому я подумал, что все будет работать нормально.

После серьезных проблем с кодированием я искал в Интернете и обнаружил, что следующие строки кода решают проблемы для большинства людей:

Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive ()

На самом деле, это не решило мою проблему. Сегодня я нашел решение, которое работает: (не utf8_decode)

$doc->addField(Zend_Search_Lucene_Field::keyword('division', utf8_decode($contact->division)), 'utf-8');

Ну, это работает отлично, но, честно говоря, выглядит довольно странно. Почему я должен конвертировать строки назад и вперед? Может я неправильно использую Lucene? Или это ошибка?

1 ответ

Решение

Запросы и хранение данных - это две разные вещи. Если ваш запрос закодирован в utf-8, то ваши данные (документ) также должны быть в кодировке utf-8, чтобы соответствовать запросу.

наконец

$doc->addField(Zend_Search_Lucene_Field::keyword('division', utf8_decode($contact->division)), 'utf-8');

должно быть

$doc->addField(Zend_Search_Lucene_Field::keyword('division',$contact->division, 'utf-8'));
Другие вопросы по тегам