Реализация Zend_Search_Lucene с Symfony2, возвращающим пустой результат - PullRequest
2 голосов
/ 23 сентября 2011

У меня есть реализация Zend_Search_Lucene в приложении Symfony2.Я использую Zend 1.11.Индекс, кажется, создается, у меня есть несколько файлов, в том числе:

_0.cfs
optimization.lock.file
read-lock-processing.lock.file
read.lock.file
segments_2
segments.gen
write.lock.file

вот код php, который у меня есть внутри контроллера

$index = \Zend_Search_Lucene::create(__DIR__.'/../../../../data/index');
$doc = new \Zend_Search_Lucene_Document();
$doc->addField(\Zend_Search_Lucene_Field::unIndexed('title', 'Symfony2') );
$doc->addField(\Zend_Search_Lucene_Field::text('contents', 'cat dog') );
$index->addDocument($doc);
$index = \Zend_Search_Lucene::open(__DIR__.'/../../../../data/index');
$term  = new \Zend_Search_Lucene_Index_Term("dog");
$query = new \Zend_Search_Lucene_Search_Query_Term($term);
$results  = $index->find($query);
try {
    $results = $index->find($query);
}
catch (\Zend_Search_Lucene_Exception $ex) {
    $results = array();
    var_dump($ex);
}
foreach ( $results as $result ) {
    echo $result->score, ' :: ', $result->title, "n";
}
var_dump($results);
exit;

Когда я запускаю скрипт, индексфайлы создаются, но возвращается только пустой массив, который распечатывается с последним значением var_dump как

array(0) { } 

Во-первых, кто-нибудь знает, как я могу проверить правильность записи индекса?Во-вторых, кто-нибудь знает, почему мой запрос не возвращает никаких результатов?Кто-нибудь успешно реализовал Zend_Search_Lucene с Symfony2?Я пробовал комплекты Lidaa Search и EWZ, но ни один из них не работает.

Я работал весь день вчера, пытаясь решить эту проблему без радости, поэтому любая помощь будет очень признательна.


Хорошо, теперь мне удалось записать в индексный файл кодировку как utf-8, подобную этой

$doc->addField(\Zend_Search_Lucene_Field::text('contents', 'dog', 'utf-8') );

Однако я до сих пор не могу получить никаких результатов.Я думаю, что это может иметь какое-то отношение к настройкам локали, но я явно настроил это так:

setlocale(LC_ALL, 'en_UK.utf-8');
ini_set('intl.default_locale', 'en-UK');

Также, если я попытаюсь проанализировать строку запроса как utf-8, сценарий зависает и timeout

$queryStr = $_GET['query'];
$query = \Zend_Search_Lucene_Search_QueryParser::parse($queryStr, 'utf-8');

Кто-нибудь знает, почему это не работает на моем Mac?

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Yeehaa!Я переустановил MAMP до версии 2.0.3 и Boom!оно работает.У меня такое ощущение, что это было связано с локалью по умолчанию или кодировкой, но я не уверен, что именно.Если кто-нибудь знает, почему в MAMP версии 2.0 была ошибка, пожалуйста, сообщите нам.

Cheers Patrick

0 голосов
/ 25 сентября 2011

Вы, похоже, пропустили коммит.

$doc->addField(\Zend_Search_Lucene_Field::text('contents', 'cat dog') );
$index->addDocument($doc);

$index->commit(); //Try adding this line

$index = \Zend_Search_Lucene::open(__DIR__.'/../../../../data/index');
...