У меня есть пользовательская поисковая система, построенная на Zend Search Lucene. Предполагается, что эта программа будет получать потоки данных из источников по всему миру на многих языках (в настоящее время 11). Я следовал каждому методу, который нашел, чтобы убедиться, что все кодируется в UTF-8. В моем индексе Lucene есть четыре поля, которые могут содержать специальные символы, но в первую очередь мы имеем дело с полями заголовка и описания, которые в настоящий момент плохо работают.
На моей локальной машине я использую XAMPP для разработки и тестирования. Код работает отлично здесь. Я могу без проблем индексировать контент на английском, испанском, китайском, русском и других языках. Я могу использовать Люка, чтобы проверить полученный индекс, и он выглядит великолепно.
На живом сервере, который имеет тот же код (я попытался удалить и повторно загрузить, чтобы быть уверенным), результирующий индекс завершается ошибкой для специальных символов. т.е. китайский и русский не индексируют ни одного из символов. В испанском контенте он обрезается именно там, где будет первый акцентированный символ. Похоже, что первый многобайтовый символ просто убивает память. Но документ все еще сохраняется в индексе. Другие поля без специальных символов сохраняются правильно.
Вот как выглядит код (например, упрощенно):
$index = Zend_Search_Lucene::create(CF_INDEX_LOCATION);
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive());
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text('title', $title));
$index->addDocument($doc);
$index->commit();
$index->optimize();
Опять же, этот код, а также библиотека Zend одинаковы в обеих средах. Локальный экземпляр приводит к успешному индексу, где все эти языки могут сосуществовать в одном и том же индексе без использования разных анализаторов.
Вот сравнение настроек сервера:
- Местное
- версия Apache: 2.2.6
- Версия PHP: 5.2.4
- PHP работает как модуль Apache
- Живая
- Apache версия: 2.2.17
- PHP версия: 5.3.6
- PHP работает как FastCGI
На обоих серверах включена поддержка многобайтовой mbstring. Я просто не уверен, что еще посмотреть. Влияет ли на это влияние CGI против модуля? Любые другие настройки мне нужно сравнить?