2011-03-16 17 views
3

現在、私はZend_PaginatorのPECL SolrQuery用アダプタで作業しています。重複したクエリを避ける方法は考えられません。誰かがより良い実装をしていますか?SolrQuery用Zend_Paginatorアダプタ

<?php 
require_once 'Zend/Paginator/Adapter/Interface.php'; 
class Xxx_Paginator_Adapter_SolrQuery implements Zend_Paginator_Adapter_Interface 
{ 
    private $query; 
    private $client; 
    public function __construct(SolrQuery $query, $client) { 
     $this->query = $query; 
     $this->client = $client instanceof SolrClient ? $client : new SolrClient($client); 
    } 
    public function count() { 
     $this->query->setRows(0); 
     return $this->execute()->numFound; 
    } 
    public function getItems($offset, $itemCountPerPage) { 
     $this->query->setStart($offset)->setRows($itemCountPerPage); 
     return $this->execute()->docs; 
    } 
    private function execute() { 
     $response = $this->client->query($this->query)->getResponse(); 
     return $response['response']; 
    } 
} 
+0

どのクエリが重複しているか説明できますか? – toneplex

答えて

0

検索した行数を受け取るためにクエリを実行する必要があるカウント関数を指しているとします。

もしそうなら、最も単純な解決策は、クエリを実行するときにクラス変数にnumFoundを格納することです。次に、count関数は、単にその数の値があればそれを取り出します。

1

これは、クエリではなくレスポンスのSolrObjectに基づいて行います。必要な情報はすべてそこにあります。

$solrResponse = $solrClient->query($query); 
$solrObject = $solrResponse->getResponse(); 
$paginator = new Zend_Paginator(new Xxx_Paginator_Adapter_SolrQuery($solrObject)); 
関連する問題