18 private $requestBuilder;
23 private $scopeResolver;
28 private $searchEngine;
33 private $searchResponseBuilder;
47 $this->requestBuilder = $requestBuilder;
48 $this->scopeResolver = $scopeResolver;
49 $this->searchEngine = $searchEngine;
50 $this->searchResponseBuilder = $searchResponseBuilder;
58 $this->requestBuilder->setRequestName(
$searchCriteria->getRequestName());
60 $scope = $this->scopeResolver->getScope()->getId();
61 $this->requestBuilder->bindDimension(
'scope', $scope);
64 foreach ($filterGroup->getFilters() as $filter) {
65 $this->addFieldToFilter($filter->getField(), $filter->getValue());
71 $request = $this->requestBuilder->create();
72 $searchResponse = $this->searchEngine->search(
$request);
74 return $this->searchResponseBuilder->build($searchResponse)
85 private function addFieldToFilter($field, $condition =
null)
87 if (!is_array($condition) || !in_array(key($condition), [
'from',
'to'],
true)) {
88 $this->requestBuilder->bind($field, $condition);
90 if (!empty($condition[
'from'])) {
91 $this->requestBuilder->bind(
"{$field}.from", $condition[
'from']);
93 if (!empty($condition[
'to'])) {
94 $this->requestBuilder->bind(
"{$field}.to", $condition[
'to']);
__construct(Builder $requestBuilder, ScopeResolverInterface $scopeResolver, SearchEngineInterface $searchEngine, SearchResponseBuilder $searchResponseBuilder)
search(SearchCriteriaInterface $searchCriteria)