/** * Creating a Zend\Paginator\Paginator from Elastica\ResultSet. * This paginator can be passed directly zf-hal or whereever you want. * This method use ElasticsearchAdapter as ArrayAdapter * * @param ResultSet $resultSet Elastica result data * @return Paginator Created paginator from resultset with ElasticsearchAdapter. */ public function buildPaginator(Resultset $resultSet) { $itemsPerPage = empty($resultSet->getQuery()->getParam('size')) ? $this->getDefaultPageSize() : $resultSet->getQuery()->getParam('size'); $currentPage = (int) ceil($resultSet->getQuery()->getParam('size') / $itemsPerPage) + 1; $results = []; foreach ($resultSet->getResults() as $result) { $data = $result->getData(); $data['_score'] = $result->getScore(); $results[] = $data; } $adapter = new ElasticsearchAdapter($results, $resultSet->getTotalHits()); $adapter->setMeta('aggs', $resultSet->getAggregations()); $paginator = new Paginator($adapter); $paginator->setCurrentPageNumber($currentPage); $paginator->setItemCountPerPage($itemsPerPage); return $paginator; }