Адаптер Zend_Paginator для SolrQuery
В настоящее время я работаю в адаптере Zend_Paginator для PECL SolrQuery. Я не могу найти способ избежать дубликата запроса. У кого-нибудь есть лучшая реализация?
<?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'];
}
}
2 ответа
Вы хотели бы сделать это на основе SolrObject для ответа, а не для запроса. Вся необходимая информация находится там.
$solrResponse = $solrClient->query($query);
$solrObject = $solrResponse->getResponse();
$paginator = new Zend_Paginator(new Xxx_Paginator_Adapter_SolrQuery($solrObject));
Я предполагаю, что вы имеете в виду функцию count, которая должна выполнить запрос, чтобы получить количество найденных строк?
Если это так, то самым простым решением было бы сохранить numFound в переменной класса при выполнении запроса. Затем функция count просто получает значение этого счетчика, если оно существует.