123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Elasticsearch\SearchAdapter;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\Search\AdapterInterface;
- use Magento\Framework\Search\RequestInterface;
- use Magento\Framework\Search\Response\QueryResponse;
- use Magento\Elasticsearch\SearchAdapter\Aggregation\Builder as AggregationBuilder;
- /**
- * Elasticsearch Search Adapter
- */
- class Adapter implements AdapterInterface
- {
- /**
- * Mapper instance
- *
- * @var Mapper
- */
- protected $mapper;
- /**
- * Response Factory
- *
- * @var ResponseFactory
- */
- protected $responseFactory;
- /**
- * @var ConnectionManager
- */
- protected $connectionManager;
- /**
- * @var AggregationBuilder
- */
- protected $aggregationBuilder;
- /**
- * @var QueryContainerFactory
- */
- private $queryContainerFactory;
- /**
- * @param ConnectionManager $connectionManager
- * @param Mapper $mapper
- * @param ResponseFactory $responseFactory
- * @param AggregationBuilder $aggregationBuilder
- * @param QueryContainerFactory $queryContainerFactory
- */
- public function __construct(
- ConnectionManager $connectionManager,
- Mapper $mapper,
- ResponseFactory $responseFactory,
- AggregationBuilder $aggregationBuilder,
- QueryContainerFactory $queryContainerFactory = null
- ) {
- $this->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;
- }
- }
|