2010-11-03 2 views
2

Je veux mettre en cache mes résultats de Zend_Lucene_Search en utilisant Zend_Paginator :: setCache()Utilisez zend_lucene_search avec cache Zend_Paginator

Je reçois l'erreur suivante:

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

Voici la partie du code:

// 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; 

Dans d'autres zones du site où j'utilise la même technique pour mettre en cache des résultats paginés qui ne proviennent pas de Zend_Lucene_Search, cela fonctionne très bien.

J'ai lu quelque part que le stockage des résultats dans une session ou un cache détruit le document lucene et que vous devez convertir les objets QueryHit en objets stdClass, mais comment? Est-ce que ça marche?

Répondre

3

Ok a résolu, j'Overthinking il

$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; 
Questions connexes