Zend Lucene индексирует UTF-8 на одном сервере, а не на другом, тот же код - PullRequest
0 голосов
/ 12 мая 2011

У меня есть пользовательская поисковая система, построенная на 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 против модуля? Любые другие настройки мне нужно сравнить?

...