3

私は現在、PECLSolrQuery用の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'];
    }
}
4

2 に答える 2

1

クエリではなく、応答の SolrObject に基づいて実行する必要があります。必要な情報はすべてそこにあります。

$solrResponse = $solrClient->query($query);
$solrObject = $solrResponse->getResponse();
$paginator = new Zend_Paginator(new Xxx_Paginator_Adapter_SolrQuery($solrObject));
于 2012-05-03T18:06:36.500 に答える
0

見つかった行数を受け取るためにクエリを実行する必要がある count 関数について言及していると思いますか?

その場合、最も簡単な解決策は、クエリの実行時に numFound をクラス変数に格納することです。次に、count 関数は、そのカウントの値が存在する場合はそれを取得します。

于 2011-06-05T19:51:09.917 に答える