| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\Framework\Search;
 
- use Magento\Framework\Api\Search\SearchInterface;
 
- use Magento\Framework\Api\Search\SearchCriteriaInterface;
 
- use Magento\Framework\App\ScopeResolverInterface;
 
- use Magento\Framework\Search\Request\Builder;
 
- class Search implements SearchInterface
 
- {
 
-     /**
 
-      * @var Builder
 
-      */
 
-     private $requestBuilder;
 
-     /**
 
-      * @var ScopeResolverInterface
 
-      */
 
-     private $scopeResolver;
 
-     /**
 
-      * @var SearchEngineInterface
 
-      */
 
-     private $searchEngine;
 
-     /**
 
-      * @var SearchResponseBuilder
 
-      */
 
-     private $searchResponseBuilder;
 
-     /**
 
-      * @param Builder $requestBuilder
 
-      * @param ScopeResolverInterface $scopeResolver
 
-      * @param SearchEngineInterface $searchEngine
 
-      * @param SearchResponseBuilder $searchResponseBuilder
 
-      */
 
-     public function __construct(
 
-         Builder $requestBuilder,
 
-         ScopeResolverInterface $scopeResolver,
 
-         SearchEngineInterface $searchEngine,
 
-         SearchResponseBuilder $searchResponseBuilder
 
-     ) {
 
-         $this->requestBuilder = $requestBuilder;
 
-         $this->scopeResolver = $scopeResolver;
 
-         $this->searchEngine = $searchEngine;
 
-         $this->searchResponseBuilder = $searchResponseBuilder;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function search(SearchCriteriaInterface $searchCriteria)
 
-     {
 
-         $this->requestBuilder->setRequestName($searchCriteria->getRequestName());
 
-         $scope = $this->scopeResolver->getScope()->getId();
 
-         $this->requestBuilder->bindDimension('scope', $scope);
 
-         foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
 
-             foreach ($filterGroup->getFilters() as $filter) {
 
-                 $this->addFieldToFilter($filter->getField(), $filter->getValue());
 
-             }
 
-         }
 
-         $this->requestBuilder->setFrom($searchCriteria->getCurrentPage() * $searchCriteria->getPageSize());
 
-         $this->requestBuilder->setSize($searchCriteria->getPageSize());
 
-         $request = $this->requestBuilder->create();
 
-         $searchResponse = $this->searchEngine->search($request);
 
-         return $this->searchResponseBuilder->build($searchResponse)
 
-             ->setSearchCriteria($searchCriteria);
 
-     }
 
-     /**
 
-      * Apply attribute filter to facet collection
 
-      *
 
-      * @param string $field
 
-      * @param string|array|null $condition
 
-      * @return $this
 
-      */
 
-     private function addFieldToFilter($field, $condition = null)
 
-     {
 
-         if (!is_array($condition) || !in_array(key($condition), ['from', 'to'], true)) {
 
-             $this->requestBuilder->bind($field, $condition);
 
-         } else {
 
-             if (!empty($condition['from'])) {
 
-                 $this->requestBuilder->bind("{$field}.from", $condition['from']);
 
-             }
 
-             if (!empty($condition['to'])) {
 
-                 $this->requestBuilder->bind("{$field}.to", $condition['to']);
 
-             }
 
-         }
 
-         return $this;
 
-     }
 
- }
 
 
  |