2

Zend_Paginator::setCache() を使用して Zend_Lucene_Search の結果をキャッシュしたい

次のエラーが表示されます。

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 オブジェクトに変換する必要があることをどこかで読みましたが、どうすればよいでしょうか? これは機能しますか?

4

1 に答える 1

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;
于 2010-11-03T15:08:10.590 に答える