Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions
Search Class Reference

Public Member Functions

 __construct (SearchInterface $search, FilterHelper $filterHelper, Filter $filterQuery, SearchResultFactory $searchResultFactory, \Magento\Framework\EntityManager\MetadataPool $metadataPool, \Magento\Search\Model\Search\PageSizeProvider $pageSize)
 
 getResult (SearchCriteriaInterface $searchCriteria, ResolveInfo $info)
 

Detailed Description

Full text search for catalog using given search criteria.

Definition at line 20 of file Search.php.

Constructor & Destructor Documentation

◆ __construct()

__construct ( SearchInterface  $search,
FilterHelper  $filterHelper,
Filter  $filterQuery,
SearchResultFactory  $searchResultFactory,
\Magento\Framework\EntityManager\MetadataPool  $metadataPool,
\Magento\Search\Model\Search\PageSizeProvider  $pageSize 
)
Parameters
SearchInterface$search
FilterHelper$filterHelper
Filter$filterQuery
SearchResultFactory$searchResultFactory
\Magento\Framework\EntityManager\MetadataPool$metadataPool
\Magento\Search\Model\Search\PageSizeProvider$pageSize

Definition at line 60 of file Search.php.

67  {
68  $this->search = $search;
69  $this->filterHelper = $filterHelper;
70  $this->filterQuery = $filterQuery;
71  $this->searchResultFactory = $searchResultFactory;
72  $this->metadataPool = $metadataPool;
73  $this->pageSizeProvider = $pageSize;
74  }

Member Function Documentation

◆ getResult()

getResult ( SearchCriteriaInterface  $searchCriteria,
ResolveInfo  $info 
)

Return results of full text catalog search of given term, and will return filtered results if filter is specified

Parameters
SearchCriteriaInterface$searchCriteria
ResolveInfo$info
Returns
SearchResult
Exceptions

Definition at line 84 of file Search.php.

84  : SearchResult
85  {
86  $idField = $this->metadataPool->getMetadata(
87  \Magento\Catalog\Api\Data\ProductInterface::class
88  )->getIdentifierField();
89  $realPageSize = $searchCriteria->getPageSize();
90  $realCurrentPage = $searchCriteria->getCurrentPage();
91  // Current page must be set to 0 and page size to max for search to grab all ID's as temporary workaround
92  $pageSize = $this->pageSizeProvider->getMaxPageSize();
93  $searchCriteria->setPageSize($pageSize);
94  $searchCriteria->setCurrentPage(0);
95  $itemsResults = $this->search->search($searchCriteria);
96 
97  $ids = [];
98  $searchIds = [];
99  foreach ($itemsResults->getItems() as $item) {
100  $ids[$item->getId()] = null;
101  $searchIds[] = $item->getId();
102  }
103 
104  $filter = $this->filterHelper->generate($idField, 'in', $searchIds);
105  $searchCriteria = $this->filterHelper->remove($searchCriteria, 'search_term');
106  $searchCriteria = $this->filterHelper->add($searchCriteria, $filter);
107  $searchResult = $this->filterQuery->getResult($searchCriteria, $info, true);
108 
109  $searchCriteria->setPageSize($realPageSize);
110  $searchCriteria->setCurrentPage($realCurrentPage);
111  $paginatedProducts = $this->paginateList($searchResult, $searchCriteria);
112 
113  $products = [];
114  if (!isset($searchCriteria->getSortOrders()[0])) {
115  foreach ($paginatedProducts as $product) {
116  if (in_array($product[$idField], $searchIds)) {
117  $ids[$product[$idField]] = $product;
118  }
119  }
120  $products = array_filter($ids);
121  } else {
122  foreach ($paginatedProducts as $product) {
123  $productId = isset($product['entity_id']) ? $product['entity_id'] : $product[$idField];
124  if (in_array($productId, $searchIds)) {
125  $products[] = $product;
126  }
127  }
128  }
129 
130  return $this->searchResultFactory->create($searchResult->getTotalCount(), $products);
131  }
$searchCriteria
foreach( $_productCollection as $_product)() ?>" class $info
Definition: listing.phtml:52

The documentation for this class was generated from the following file: