connectionManager = $connectionManager; $this->mapper = $mapper; $this->responseFactory = $responseFactory; $this->aggregationBuilder = $aggregationBuilder; $this->queryContainerFactory = $queryContainerFactory ?: ObjectManager::getInstance()->get(QueryContainerFactory::class); } /** * @param RequestInterface $request * @return QueryResponse */ public function query(RequestInterface $request) { $client = $this->connectionManager->getConnection(); $aggregationBuilder = $this->aggregationBuilder; $query = $this->mapper->buildQuery($request); $aggregationBuilder->setQuery($this->queryContainerFactory->create(['query' => $query])); $rawResponse = $client->query($query); $rawDocuments = isset($rawResponse['hits']['hits']) ? $rawResponse['hits']['hits'] : []; $queryResponse = $this->responseFactory->create( [ 'documents' => $rawDocuments, 'aggregations' => $aggregationBuilder->build($request, $rawResponse), ] ); return $queryResponse; } }