Поиск Zend_lucene с акцентами

Я работаю над поисковой системой для французского веб-сайта с Zend_Search_Lucene в качестве отдельного компонента. Все хорошо работает на моем локальном веб-сервере (WAMP) в Windows, но поиск с акцентированными словами (например: géographie) не работает на моем производственном сервере (который работает на Unix).

Я сгенерировал индекс в Linux, акцентированные слова индексируются правильно.

Снимок экрана моего сгенерированного индекса здесь

Пробовал форсировать кодировку с параметрами анализатора, конвертировать строку запроса с utf8_encode. Но я все еще не могу заставить его работать.

Я вызываю Lucene с такими параметрами:

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

$index = Zend_Search_Lucene::open($cheminIndexes);
$resultats = $index->find(Zend_Search_Lucene_Search_QueryParser::parse(utf8_encode($_POST['recherche'])));

Этот код возвращает все слова без ударения, но не возвращает ни одно из слов с ударением, хотя эти слова проиндексированы. Это расстраивает, потому что я не понимаю, почему это работает в Windows, я чувствую, что где-то отсутствует слой кодирования, но я не могу найти никакой информации об этом в Google.


person DoesNotCompute    schedule 26.06.2011    source источник


Ответы (1)


У меня есть настройка сайта с точно такими же параметрами, как у вас (нечувствительный, utf-8, AND). Однако я использовал для создания объекта индекса через:

$index = new Zend_Search_Lucene('/path/to/index');

а не через прокси (как в вашем случае через Zend_Search_Lucene::open, но это не должно иметь значения).

Также я просто передаю запрос (после короткой проверки работоспособности) прямо в индекс (без разбора):

$query = $_GET['q'];
...
$results = $index->find($query);
person miku    schedule 26.06.2011
comment
спасибо, я узнал, что вы можете передать кодировку в качестве параметра функции разбора: $resultats = $index-›find(Zend_Search_Lucene_Search_QueryParser::parse($_POST['recherche'], 'utf-8')); Это также работает. - person DoesNotCompute; 27.06.2011