Skip to content

Commit 3c25d6e

Browse files
committed
Merge remote-tracking branch 'origin/2.3.0-release' into MAGETWO-95595
2 parents f39dec6 + 4220e6e commit 3c25d6e

File tree

4 files changed

+137
-3
lines changed

4 files changed

+137
-3
lines changed

app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Search.php

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use Magento\CatalogGraphQl\Model\Resolver\Products\SearchCriteria\Helper\Filter as FilterHelper;
1313
use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResult;
1414
use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResultFactory;
15-
use Magento\Framework\EntityManager\EntityManager;
1615
use Magento\Search\Api\SearchInterface;
1716

1817
/**
@@ -45,31 +44,42 @@ class Search
4544
*/
4645
private $metadataPool;
4746

47+
/**
48+
* @var \Magento\Search\Model\Search\PageSizeProvider
49+
*/
50+
private $pageSizeProvider;
51+
4852
/**
4953
* @param SearchInterface $search
5054
* @param FilterHelper $filterHelper
5155
* @param Filter $filterQuery
5256
* @param SearchResultFactory $searchResultFactory
57+
* @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
58+
* @param \Magento\Search\Model\Search\PageSizeProvider $pageSize
5359
*/
5460
public function __construct(
5561
SearchInterface $search,
5662
FilterHelper $filterHelper,
5763
Filter $filterQuery,
5864
SearchResultFactory $searchResultFactory,
59-
\Magento\Framework\EntityManager\MetadataPool $metadataPool
65+
\Magento\Framework\EntityManager\MetadataPool $metadataPool,
66+
\Magento\Search\Model\Search\PageSizeProvider $pageSize
6067
) {
6168
$this->search = $search;
6269
$this->filterHelper = $filterHelper;
6370
$this->filterQuery = $filterQuery;
6471
$this->searchResultFactory = $searchResultFactory;
6572
$this->metadataPool = $metadataPool;
73+
$this->pageSizeProvider = $pageSize;
6674
}
6775

6876
/**
6977
* Return results of full text catalog search of given term, and will return filtered results if filter is specified
7078
*
7179
* @param SearchCriteriaInterface $searchCriteria
80+
* @param ResolveInfo $info
7281
* @return SearchResult
82+
* @throws \Exception
7383
*/
7484
public function getResult(SearchCriteriaInterface $searchCriteria, ResolveInfo $info) : SearchResult
7585
{
@@ -79,7 +89,8 @@ public function getResult(SearchCriteriaInterface $searchCriteria, ResolveInfo $
7989
$realPageSize = $searchCriteria->getPageSize();
8090
$realCurrentPage = $searchCriteria->getCurrentPage();
8191
// Current page must be set to 0 and page size to max for search to grab all ID's as temporary workaround
82-
$searchCriteria->setPageSize(PHP_INT_MAX);
92+
$pageSize = $this->pageSizeProvider->getMaxPageSize();
93+
$searchCriteria->setPageSize($pageSize);
8394
$searchCriteria->setCurrentPage(0);
8495
$itemsResults = $this->search->search($searchCriteria);
8596

app/code/Magento/Elasticsearch/etc/di.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,4 +413,12 @@
413413
<argument name="fieldTypeResolver" xsi:type="object">\Magento\Elasticsearch\Elasticsearch5\Model\Adapter\FieldMapper\Product\FieldProvider\FieldType\Resolver\CompositeResolver</argument>
414414
</arguments>
415415
</type>
416+
<type name="Magento\Search\Model\Search\PageSizeProvider">
417+
<arguments>
418+
<argument name="pageSizeBySearchEngine" xsi:type="array">
419+
<item name="elasticsearch" xsi:type="number">2147483647</item>
420+
<item name="elasticsearch5" xsi:type="number">2147483647</item>
421+
</argument>
422+
</arguments>
423+
</type>
416424
</config>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Search\Model\Search;
9+
10+
/**
11+
* Returns max page size by search engine name
12+
* @api
13+
*/
14+
class PageSizeProvider
15+
{
16+
/**
17+
* @var \Magento\Search\Model\EngineResolver
18+
*/
19+
private $engineResolver;
20+
21+
/**
22+
* @var array
23+
*/
24+
private $pageSizeBySearchEngine;
25+
26+
/**
27+
* @param \Magento\Search\Model\EngineResolver $engineResolver
28+
* @param array $pageSizeBySearchEngine
29+
*/
30+
public function __construct(
31+
\Magento\Search\Model\EngineResolver $engineResolver,
32+
array $pageSizeBySearchEngine = []
33+
) {
34+
$this->engineResolver = $engineResolver;
35+
$this->pageSizeBySearchEngine = $pageSizeBySearchEngine;
36+
}
37+
38+
/**
39+
* Returns max_page_size depends on engine
40+
*
41+
* @return integer
42+
*/
43+
public function getMaxPageSize() : int
44+
{
45+
$searchEngine = $this->engineResolver->getCurrentSearchEngine();
46+
47+
$pageSize = PHP_INT_MAX;
48+
if (isset($this->pageSizeBySearchEngine[$searchEngine])) {
49+
$pageSize = $this->pageSizeBySearchEngine[$searchEngine];
50+
}
51+
52+
return (int)$pageSize;
53+
}
54+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Search\Test\Unit\Model\Search;
9+
10+
use Magento\Search\Model\Search\PageSizeProvider;
11+
12+
class PageSizeProviderTest extends \PHPUnit\Framework\TestCase
13+
{
14+
/**
15+
* @var PageSizeProvider
16+
*/
17+
private $model;
18+
19+
/**
20+
* @var \Magento\Search\Model\EngineResolver|\PHPUnit_Framework_MockObject_MockObject
21+
*/
22+
private $pageSizeBySearchEngineMock;
23+
24+
public function setUp()
25+
{
26+
$this->pageSizeBySearchEngineMock = $this->getMockBuilder(\Magento\Search\Model\EngineResolver::class)
27+
->disableOriginalConstructor()
28+
->getMock();
29+
30+
$this->model = new PageSizeProvider(
31+
32+
$this->pageSizeBySearchEngineMock,
33+
['search' => 10,
34+
'catalogSearch3' => 11
35+
]
36+
);
37+
}
38+
39+
/**
40+
* @param string $searchEngine
41+
* @param int $size
42+
* @dataProvider getPageSizeDataProvider
43+
*/
44+
public function testGetPageSize($searchEngine, $size)
45+
{
46+
$this->pageSizeBySearchEngineMock
47+
->expects($this->once())
48+
->method('getCurrentSearchEngine')
49+
->willReturn($searchEngine);
50+
$this->assertEquals($size, $this->model->getMaxPageSize());
51+
}
52+
53+
public function getPageSizeDataProvider()
54+
{
55+
return [
56+
['search', 10],
57+
['catalogSearch3', 11],
58+
['newSearch', PHP_INT_MAX]
59+
];
60+
}
61+
}

0 commit comments

Comments
 (0)