| Current Path : /home/rtorresani/www/vendor/magento/module-elasticsearch/SearchAdapter/Query/ |
| Current File : //home/rtorresani/www/vendor/magento/module-elasticsearch/SearchAdapter/Query/Builder.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Elasticsearch\SearchAdapter\Query;
use Magento\Elasticsearch\Model\Config;
use Magento\Elasticsearch\SearchAdapter\Query\Builder\Aggregation as AggregationBuilder;
use Magento\Elasticsearch\SearchAdapter\Query\Builder\Sort;
use Magento\Elasticsearch\SearchAdapter\SearchIndexNameResolver;
use Magento\Framework\App\ScopeResolverInterface;
use Magento\Framework\Search\RequestInterface;
use Magento\Elasticsearch\Elasticsearch5\SearchAdapter\Query\Builder as Elasticsearch5Builder;
/**
* Query builder for search adapter.
*
* @api
* @since 100.1.0
*/
class Builder extends Elasticsearch5Builder
{
private const ELASTIC_INT_MAX = 2147483647;
/**
* @var Sort
*/
private $sortBuilder;
/**
* @param Config $clientConfig
* @param SearchIndexNameResolver $searchIndexNameResolver
* @param AggregationBuilder $aggregationBuilder
* @param ScopeResolverInterface $scopeResolver
* @param Sort $sortBuilder
*/
public function __construct(
Config $clientConfig,
SearchIndexNameResolver $searchIndexNameResolver,
AggregationBuilder $aggregationBuilder,
ScopeResolverInterface $scopeResolver,
Sort $sortBuilder
) {
parent::__construct($clientConfig, $searchIndexNameResolver, $aggregationBuilder, $scopeResolver);
$this->sortBuilder = $sortBuilder;
}
/**
* Set initial settings for query.
*
* @param RequestInterface $request
* @return array
* @since 100.1.0
*/
public function initQuery(RequestInterface $request)
{
$dimension = current($request->getDimensions());
$storeId = $this->scopeResolver->getScope($dimension->getValue())->getId();
$searchQuery = [
'index' => $this->searchIndexNameResolver->getIndexName($storeId, $request->getIndex()),
'type' => $this->clientConfig->getEntityType(),
'body' => [
'from' => min(self::ELASTIC_INT_MAX, $request->getFrom()),
'size' => $request->getSize(),
'fields' => ['_id', '_score'],
'sort' => $this->sortBuilder->getSort($request),
'query' => [],
],
];
return $searchQuery;
}
}