2010-11-03 16 views
2

我想使用的是Zend_Paginator :: setCache()從Zend_Lucene_Search緩存我的結果使用zend_lucene_search與Zend_Paginator的緩存

我得到以下錯誤:

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對象,但是該怎麼做?這是否工作?

回答

3

好的解決了這個問題,我得太多了它

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