2011-06-26 3 views
1

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

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

See a screenshot of my generated index here

Я пытался заставить кодировку с параметрами анализатора, преобразовать строку запроса с 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']))); 

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

ответ

0

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

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

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

Кроме того, я просто передать запрос (после короткой проверки вменяемости), непосредственно к индексу (без разбора):

$query = $_GET['q']; 
... 
$results = $index->find($query); 
+1

спасибо, я узнал, что вы можете передать кодировку в качестве параметра в разборе function: $ resultats = $ index-> ​​find (Zend_Search_Lucene_Search_QueryParser :: parse ($ _ POST ['recherche'], 'utf-8')); Он также работает. – DoesNotCompute

Смежные вопросы