簡體   English   中英

用於SolrQuery的Zend_Paginator適配器

[英]Zend_Paginator adapter for 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'];
    }
}

您可能希望基於SolrObject進行響應,而不是查詢。 您需要的所有信息都在那里。

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

我假設您指的是count函數必須執行查詢以接收找到的行數?

如果是這樣,最簡單的解決方案是在執行查詢時將numFound存儲在類變量中。 然后,count函數只檢索該計數的值(如果存在)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM