Используйте zend_lucene_search с кешем Zend_Paginator - PullRequest
2 голосов
/ 03 ноября 2010

Я хочу кэшировать свои результаты из Zend_Lucene_Search, используя Zend_Paginator :: setCache ()

Я получаю следующую ошибку:

Warning: fseek() expects parameter 1 to be resource, integer given

Вот часть кода:

// Load index
$index = Zend_Search_Lucene::open(APPLICATION_PATH . '/indexes');
// Paginate
$paginator = Zend_Paginator::factory($index->find($query));
$paginator->setCache($this->_cache);
$paginator->setItemCountPerPage($items);
$paginator->setCurrentPageNumber($page);
// Send to view
$this->view->hits = $paginator;

В других областях сайта, где я использую ту же технику для кэширования разбитых на страницы результатов, которые не из Zend_Lucene_Search, это работает нормально.

Я где-то читал, что сохранение результатов в сеансе или кэше разрушаетlucene документ и что вы должны конвертировать объекты QueryHit в объекты stdClass, но как?Это работает?

1 Ответ

3 голосов
/ 03 ноября 2010

Хорошо, решил это, я переосмыслил

$hits = $index->find($query);
$this->view->totalHits = count($hits);
// Convert to stdClass to allow caching
foreach ($hits as $i => $hit) {
    $resultsArray[$i] = new stdClass();
    $doc = $hit->getDocument();
    foreach($doc->getFieldNames() as $field){
        $resultsArray[$i]->{$field} = $hit->{$field};
    }
}
// Paginate
$paginator = Zend_Paginator::factory($resultsArray);
$paginator->setCache($this->_cache);
$paginator->setItemCountPerPage($items);
$paginator->setCurrentPageNumber($page);
// Send to view
$this->view->hits = $paginator;
...