8
8
use Magento \Framework \DB \Select ;
9
9
use Magento \Framework \Exception \StateException ;
10
10
use Magento \Framework \Search \Adapter \Mysql \TemporaryStorage ;
11
- use Magento \Framework \Search \Response \QueryResponse ;
12
11
13
12
/**
14
13
* Fulltext Collection
15
14
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
16
15
*/
17
16
class Collection extends \Magento \Catalog \Model \ResourceModel \Product \Collection
18
17
{
19
- /** @var QueryResponse */
20
- protected $ queryResponse ;
18
+ /**
19
+ * @var string
20
+ */
21
+ private $ queryText ;
21
22
22
23
/**
23
- * Catalog search data
24
- *
25
- * @var \Magento\Search\Model\QueryFactory
24
+ * @var string|null
26
25
*/
27
- protected $ queryFactory = null ;
26
+ private $ order = null ;
28
27
29
28
/**
30
- * @var \Magento\Framework\Search\Request\Builder
29
+ * @var string
31
30
*/
32
- private $ requestBuilder ;
31
+ private $ searchRequestName ;
33
32
34
33
/**
35
- * @var \Magento\Search\Model\SearchEngine
34
+ * @var \Magento\Framework\ Search\Adapter\Mysql\TemporaryStorageFactory
36
35
*/
37
- private $ searchEngine ;
36
+ private $ temporaryStorageFactory ;
38
37
39
38
/**
40
- * @var string
39
+ * @var \Magento\Search\Api\SearchInterface
41
40
*/
42
- private $ queryText ;
41
+ private $ search ;
43
42
44
43
/**
45
- * @var string|null
44
+ * @var \Magento\Framework\Api\Search\SearchCriteriaBuilder
46
45
*/
47
- private $ order = null ;
46
+ private $ searchCriteriaBuilder ;
48
47
49
48
/**
50
- * @var string
49
+ * @var \Magento\Framework\Api\Search\SearchResultInterface
51
50
*/
52
- private $ searchRequestName ;
51
+ private $ searchResult ;
53
52
54
53
/**
55
- * @var \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory
54
+ * @var \Magento\Framework\Api\FilterBuilder
56
55
*/
57
- private $ temporaryStorageFactory ;
56
+ private $ filterBuilder ;
58
57
59
58
/**
60
59
* @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
@@ -77,11 +76,11 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
77
76
* @param \Magento\Framework\Stdlib\DateTime $dateTime
78
77
* @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
79
78
* @param \Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation $productLimitation
80
- * @param \Magento\Search\Model\QueryFactory $catalogSearchData
81
- * @param \Magento\Framework\Search\Request\Builder $requestBuilder
82
- * @param \Magento\Search\Model\SearchEngine $searchEngine
83
79
* @param \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory $temporaryStorageFactory
84
- * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
80
+ * @param \Magento\Search\Api\SearchInterface $search
81
+ * @param \Magento\Framework\Api\Search\SearchCriteriaBuilder $searchCriteriaBuilder
82
+ * @param \Magento\Framework\Api\FilterBuilder $filterBuilder
83
+ * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
85
84
* @param string $searchRequestName
86
85
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
87
86
*/
@@ -106,14 +105,13 @@ public function __construct(
106
105
\Magento \Framework \Stdlib \DateTime $ dateTime ,
107
106
\Magento \Customer \Api \GroupManagementInterface $ groupManagement ,
108
107
\Magento \Catalog \Model \ResourceModel \Product \Collection \ProductLimitation $ productLimitation ,
109
- \Magento \Search \Model \QueryFactory $ catalogSearchData ,
110
- \Magento \Framework \Search \Request \Builder $ requestBuilder ,
111
- \Magento \Search \Model \SearchEngine $ searchEngine ,
112
108
\Magento \Framework \Search \Adapter \Mysql \TemporaryStorageFactory $ temporaryStorageFactory ,
109
+ \Magento \Search \Api \SearchInterface $ search ,
110
+ \Magento \Framework \Api \Search \SearchCriteriaBuilder $ searchCriteriaBuilder ,
111
+ \Magento \Framework \Api \FilterBuilder $ filterBuilder ,
113
112
\Magento \Framework \DB \Adapter \AdapterInterface $ connection = null ,
114
113
$ searchRequestName = 'catalog_view_container '
115
114
) {
116
- $ this ->queryFactory = $ catalogSearchData ;
117
115
parent ::__construct (
118
116
$ entityFactory ,
119
117
$ logger ,
@@ -137,10 +135,11 @@ public function __construct(
137
135
$ productLimitation ,
138
136
$ connection
139
137
);
140
- $ this ->requestBuilder = $ requestBuilder ;
141
- $ this ->searchEngine = $ searchEngine ;
142
138
$ this ->temporaryStorageFactory = $ temporaryStorageFactory ;
143
139
$ this ->searchRequestName = $ searchRequestName ;
140
+ $ this ->search = $ search ;
141
+ $ this ->searchCriteriaBuilder = $ searchCriteriaBuilder ;
142
+ $ this ->filterBuilder = $ filterBuilder ;
144
143
}
145
144
146
145
/**
@@ -152,17 +151,24 @@ public function __construct(
152
151
*/
153
152
public function addFieldToFilter ($ field , $ condition = null )
154
153
{
155
- if ($ this ->queryResponse !== null ) {
154
+ if ($ this ->searchResult !== null ) {
156
155
throw new \RuntimeException ('Illegal state ' );
157
156
}
157
+
158
158
if (!is_array ($ condition ) || !in_array (key ($ condition ), ['from ' , 'to ' ])) {
159
- $ this ->requestBuilder ->bind ($ field , $ condition );
159
+ $ this ->filterBuilder ->setField ($ field );
160
+ $ this ->filterBuilder ->setValue ($ condition );
161
+ $ this ->searchCriteriaBuilder ->addFilter ($ this ->filterBuilder ->create ());
160
162
} else {
161
163
if (!empty ($ condition ['from ' ])) {
162
- $ this ->requestBuilder ->bind ("{$ field }.from " , $ condition ['from ' ]);
164
+ $ this ->filterBuilder ->setField ("{$ field }.from " );
165
+ $ this ->filterBuilder ->setValue ($ condition ['from ' ]);
166
+ $ this ->searchCriteriaBuilder ->addFilter ($ this ->filterBuilder ->create ());
163
167
}
164
168
if (!empty ($ condition ['to ' ])) {
165
- $ this ->requestBuilder ->bind ("{$ field }.to " , $ condition ['to ' ]);
169
+ $ this ->filterBuilder ->setField ("{$ field }.to " );
170
+ $ this ->filterBuilder ->setValue ($ condition ['to ' ]);
171
+ $ this ->searchCriteriaBuilder ->addFilter ($ this ->filterBuilder ->create ());
166
172
}
167
173
}
168
174
return $ this ;
@@ -185,26 +191,28 @@ public function addSearchFilter($query)
185
191
*/
186
192
protected function _renderFiltersBefore ()
187
193
{
188
- $ this ->requestBuilder ->bindDimension ('scope ' , $ this ->getStoreId ());
189
194
if ($ this ->queryText ) {
190
- $ this ->requestBuilder ->bind ('search_term ' , $ this ->queryText );
195
+ $ this ->filterBuilder ->setField ('search_term ' );
196
+ $ this ->filterBuilder ->setValue ($ this ->queryText );
197
+ $ this ->searchCriteriaBuilder ->addFilter ($ this ->filterBuilder ->create ());
191
198
}
192
199
193
200
$ priceRangeCalculation = $ this ->_scopeConfig ->getValue (
194
201
\Magento \Catalog \Model \Layer \Filter \Dynamic \AlgorithmFactory::XML_PATH_RANGE_CALCULATION ,
195
202
\Magento \Store \Model \ScopeInterface::SCOPE_STORE
196
203
);
197
204
if ($ priceRangeCalculation ) {
198
- $ this ->requestBuilder ->bind ('price_dynamic_algorithm ' , $ priceRangeCalculation );
205
+ $ this ->filterBuilder ->setField ('price_dynamic_algorithm ' );
206
+ $ this ->filterBuilder ->setValue ($ priceRangeCalculation );
207
+ $ this ->searchCriteriaBuilder ->addFilter ($ this ->filterBuilder ->create ());
199
208
}
200
209
201
- $ this ->requestBuilder ->setRequestName ($ this ->searchRequestName );
202
- $ queryRequest = $ this ->requestBuilder ->create ();
203
-
204
- $ this ->queryResponse = $ this ->searchEngine ->search ($ queryRequest );
210
+ $ searchCriteria = $ this ->searchCriteriaBuilder ->create ();
211
+ $ searchCriteria ->setRequestName ($ this ->searchRequestName );
212
+ $ this ->searchResult = $ this ->search ->search ($ searchCriteria );
205
213
206
214
$ temporaryStorage = $ this ->temporaryStorageFactory ->create ();
207
- $ table = $ temporaryStorage ->storeDocuments ($ this ->queryResponse -> getIterator ());
215
+ $ table = $ temporaryStorage ->storeApiDocuments ($ this ->searchResult -> getItems ());
208
216
209
217
$ this ->getSelect ()->joinInner (
210
218
[
@@ -214,7 +222,7 @@ protected function _renderFiltersBefore()
214
222
[]
215
223
);
216
224
217
- $ this ->_totalRecords = $ this ->queryResponse -> count ();
225
+ $ this ->_totalRecords = $ this ->searchResult -> getTotalCount ();
218
226
219
227
if ($ this ->order && 'relevance ' === $ this ->order ['field ' ]) {
220
228
$ this ->getSelect ()->order ('search_result. ' . TemporaryStorage::FIELD_SCORE . ' ' . $ this ->order ['dir ' ]);
@@ -268,7 +276,7 @@ public function getFacetedData($field)
268
276
{
269
277
$ this ->_renderFilters ();
270
278
$ result = [];
271
- $ aggregations = $ this ->queryResponse ->getAggregations ();
279
+ $ aggregations = $ this ->searchResult ->getAggregations ();
272
280
$ bucket = $ aggregations ->getBucket ($ field . '_bucket ' );
273
281
if ($ bucket ) {
274
282
foreach ($ bucket ->getValues () as $ value ) {
0 commit comments