【问题标题】:Zend_Paginator adapter for SolrQuerySolrQuery 的 Zend_Paginator 适配器
【发布时间】:2011-07-16 20:01:45
【问题描述】:

我目前正在使用 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'];
    }
}

【问题讨论】:

  • 能解释一下重复的查询吗?

标签: php zend-framework solr pagination zend-paginator


【解决方案1】:

您可能希望根据响应的 SolrObject 而不是查询来执行此操作。您需要的所有信息都在其中。

$solrResponse = $solrClient->query($query);
$solrObject = $solrResponse->getResponse();
$paginator = new Zend_Paginator(new Xxx_Paginator_Adapter_SolrQuery($solrObject));

【讨论】:

    【解决方案2】:

    我假设您指的是计数函数必须执行查询才能接收找到的行数?

    如果是这样,最简单的解决方案是在执行查询时将 numFound 存储在类变量中。然后,count 函数只需检索该计数的值(如果存在)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多