Skip to content

Commit 3a51ae2

Browse files
MAGETWO-69130: Non effective query for catalog search & layered navigation
1 parent 622008c commit 3a51ae2

File tree

14 files changed

+33
-114
lines changed

14 files changed

+33
-114
lines changed

app/code/Magento/CatalogSearch/Model/Search/BaseSelectStrategy/BaseSelectAttributesSearchStrategy.php renamed to app/code/Magento/CatalogSearch/Model/Adapter/Mysql/BaseSelectStrategy/BaseSelectAttributesSearchStrategy.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\CatalogSearch\Model\Search\BaseSelectStrategy;
7+
namespace Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy;
88

9+
use Magento\CatalogSearch\Model\Search\BaseSelectStrategy\BaseSelectStrategyInterface;
910
use Magento\Framework\App\ResourceConnection;
1011
use Magento\Store\Model\StoreManagerInterface;
1112
use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;

app/code/Magento/CatalogSearch/Model/Search/BaseSelectStrategy/BaseSelectFullTextSearchStrategy.php renamed to app/code/Magento/CatalogSearch/Model/Adapter/Mysql/BaseSelectStrategy/BaseSelectFullTextSearchStrategy.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\CatalogSearch\Model\Search\BaseSelectStrategy;
7+
namespace Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy;
88

9+
use Magento\CatalogSearch\Model\Search\BaseSelectStrategy\BaseSelectStrategyInterface;
910
use Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainer;
1011
use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;
1112
use Magento\Framework\App\ResourceConnection;

app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/Preprocessor.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use Magento\Catalog\Api\Data\ProductInterface;
99
use Magento\Catalog\Model\Product;
1010
use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
11-
use Magento\CatalogInventory\Model\Stock;
1211
use Magento\CatalogSearch\Model\Search\TableMapper;
1312
use Magento\Eav\Model\Config;
1413
use Magento\Framework\App\Config\ScopeConfigInterface;
@@ -20,9 +19,9 @@
2019
use Magento\Framework\Search\Adapter\Mysql\ConditionManager;
2120
use Magento\Framework\Search\Adapter\Mysql\Filter\PreprocessorInterface;
2221
use Magento\Framework\Search\Request\FilterInterface;
23-
use Magento\Store\Model\ScopeInterface;
2422
use Magento\Store\Model\Store;
2523
use Magento\Customer\Model\Session;
24+
use Magento\CatalogSearch\Model\Search\FilterMapper\VisibilityFilter;
2625

2726
/**
2827
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -166,7 +165,7 @@ private function processQueryWithField(FilterInterface $filter, $isNegation, $qu
166165
$this->connection->quoteIdentifier($alias . '.' . $attribute->getAttributeCode()),
167166
$query
168167
);
169-
} elseif ($filter->getField() === 'visibility') {
168+
} elseif ($filter->getField() === VisibilityFilter::VISIBILITY_FILTER_FIELD) {
170169
return '';
171170
} elseif ($filter->getType() === FilterInterface::TYPE_TERM &&
172171
in_array($attribute->getFrontendInput(), ['select', 'multiselect'], true)

app/code/Magento/CatalogSearch/Model/Search/BaseSelectStrategy/StrategyMapper.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
namespace Magento\CatalogSearch\Model\Search\BaseSelectStrategy;
77

88
use Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainer;
9+
use Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy\BaseSelectFullTextSearchStrategy;
10+
use Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy\BaseSelectAttributesSearchStrategy;
911

1012
/**
1113
* Class StrategyMapper

app/code/Magento/CatalogSearch/Model/Search/FilterMapper/FilterContext.php

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,18 @@ class FilterContext implements FilterStrategyInterface
2727
*/
2828
private $eavConfig;
2929

30-
/**
31-
* @var TermDropdownStrategy
32-
* @deprecated
33-
*/
34-
private $termDropdownStrategy;
35-
3630
/**
3731
* @var StaticAttributeStrategy
3832
*/
3933
private $staticAttributeStrategy;
4034

41-
/**
42-
* @var AliasResolver
43-
* @deprecated
44-
*/
45-
private $aliasResolver;
46-
4735
/**
4836
* @param EavConfig $eavConfig
4937
* @param AliasResolver $aliasResolver
5038
* @param ExclusionStrategy $exclusionStrategy
5139
* @param TermDropdownStrategy $termDropdownStrategy
5240
* @param StaticAttributeStrategy $staticAttributeStrategy
41+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
5342
*/
5443
public function __construct(
5544
EavConfig $eavConfig,
@@ -59,9 +48,7 @@ public function __construct(
5948
StaticAttributeStrategy $staticAttributeStrategy
6049
) {
6150
$this->eavConfig = $eavConfig;
62-
$this->aliasResolver = $aliasResolver;
6351
$this->exclusionStrategy = $exclusionStrategy;
64-
$this->termDropdownStrategy = $termDropdownStrategy;
6552
$this->staticAttributeStrategy = $staticAttributeStrategy;
6653
}
6754

app/code/Magento/CatalogSearch/Model/Search/FilterMapper/VisibilityFilter.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
*/
2020
class VisibilityFilter
2121
{
22+
/**
23+
* Name of the field that is used for visibility filtering
24+
*/
25+
const VISIBILITY_FILTER_FIELD = 'visibility';
26+
2227
/**
2328
* Defines strategies of how filter should be applied
2429
*/
@@ -172,7 +177,10 @@ private function applyFilterByWhere(FilterInterface $filter, Select $select)
172177
*/
173178
private function getVisibilityAttributeId()
174179
{
175-
$attr = $this->eavConfig->getAttribute(\Magento\Catalog\Model\Product::ENTITY, 'visibility');
180+
$attr = $this->eavConfig->getAttribute(
181+
\Magento\Catalog\Model\Product::ENTITY,
182+
self::VISIBILITY_FILTER_FIELD
183+
);
176184

177185
if ($attr === null) {
178186
throw new \InvalidArgumentException('Wrong id for visibility attribute');

app/code/Magento/CatalogSearch/Model/Search/IndexBuilder.php

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -29,48 +29,6 @@
2929
*/
3030
class IndexBuilder implements IndexBuilderInterface
3131
{
32-
/**
33-
* @var Resource
34-
* @deprecated
35-
*/
36-
private $resource;
37-
38-
/**
39-
* @var ScopeConfigInterface
40-
* @deprecated
41-
*/
42-
private $config;
43-
44-
/**
45-
* @var StoreManagerInterface
46-
* @deprecated
47-
*/
48-
private $storeManager;
49-
50-
/**
51-
* @var IndexScopeResolver
52-
* @deprecated
53-
*/
54-
private $scopeResolver;
55-
56-
/**
57-
* @var ConditionManager
58-
* @deprecated
59-
*/
60-
private $conditionManager;
61-
62-
/**
63-
* @var ScopeResolverInterface
64-
* @deprecated
65-
*/
66-
private $dimensionScopeResolver;
67-
68-
/**
69-
* @var TableMapper
70-
* @deprecated
71-
*/
72-
private $tableMapper;
73-
7432
/**
7533
* @var DimensionsProcessor
7634
*/
@@ -104,6 +62,7 @@ class IndexBuilder implements IndexBuilderInterface
10462
* @param BaseSelectStrategyMapper|null $baseSelectStrategyMapper
10563
* @param FilterMapper|null $filterMapper
10664
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
65+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
10766
*/
10867
public function __construct(
10968
ResourceConnection $resource,
@@ -118,14 +77,6 @@ public function __construct(
11877
BaseSelectStrategyMapper $baseSelectStrategyMapper = null,
11978
FilterMapper $filterMapper = null
12079
) {
121-
$this->resource = $resource;
122-
$this->config = $config;
123-
$this->storeManager = $storeManager;
124-
$this->conditionManager = $conditionManager;
125-
$this->scopeResolver = $scopeResolver;
126-
$this->dimensionScopeResolver = $dimensionScopeResolver;
127-
$this->tableMapper = $tableMapper;
128-
12980
$this->dimensionsProcessor = $dimensionsProcessor ?: ObjectManager::getInstance()
13081
->get(DimensionsProcessor::class);
13182

app/code/Magento/CatalogSearch/Model/Search/SelectContainer/SelectContainerBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Magento\Framework\Search\RequestInterface;
1313
use Magento\Framework\App\ResourceConnection;
1414
use Magento\Store\Model\ScopeInterface;
15+
use Magento\CatalogSearch\Model\Search\FilterMapper\VisibilityFilter;
1516

1617
/**
1718
* Class SelectContainerBuilder
@@ -90,7 +91,7 @@ public function buildByRequest(RequestInterface $request)
9091

9192
foreach ($this->filtersExtractor->extractFiltersFromQuery($request->getQuery()) as $filter) {
9293
if ($this->customAttributeFilterCheck->isCustom($filter)) {
93-
if ($filter->getField() === 'visibility') {
94+
if ($filter->getField() === VisibilityFilter::VISIBILITY_FILTER_FIELD) {
9495
$visibilityFilter = $filter;
9596
} else {
9697
$customAttributesFilters[] = $filter;

app/code/Magento/CatalogSearch/Test/Unit/Model/Search/BaseSelectStrategy/StrategyMapperTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
namespace Magento\CatalogSearch\Test\Unit\Model\Search\BaseSelectStrategy;
88

9-
use \Magento\CatalogSearch\Model\Search\BaseSelectStrategy\BaseSelectAttributesSearchStrategy;
10-
use \Magento\CatalogSearch\Model\Search\BaseSelectStrategy\BaseSelectFullTextSearchStrategy;
9+
use Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy\BaseSelectAttributesSearchStrategy;
10+
use Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy\BaseSelectFullTextSearchStrategy;
1111
use \Magento\CatalogSearch\Model\Search\BaseSelectStrategy\StrategyMapper;
1212
use \Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainer;
1313

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\CatalogSearch\Model\Search\BaseSelectStrategy;
7+
namespace Magento\CatalogSearch\Model\Adapter\Mysql\BaseSelectStrategy;
88

99
use Magento\Framework\App\ResourceConnection;
1010
use Magento\Store\Model\StoreManagerInterface;
11-
use Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\FrontendResource;
1211
use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;
1312
use Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainerFactory;
1413

@@ -29,11 +28,6 @@ class BaseSelectAttributesSearchStrategyTest extends \PHPUnit_Framework_TestCase
2928
*/
3029
private $resource;
3130

32-
/**
33-
* @var FrontendResource
34-
*/
35-
private $indexerEavFrontendResource;
36-
3731
/**
3832
* @var StoreManagerInterface
3933
*/
@@ -55,9 +49,6 @@ protected function setUp()
5549
$this->resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
5650
->create(ResourceConnection::class);
5751

58-
$this->indexerEavFrontendResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
59-
->create(FrontendResource::class);
60-
6152
$this->storeManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
6253
->create(StoreManagerInterface::class);
6354

@@ -90,7 +81,7 @@ private function getMainSelect()
9081
$select = $this->resource->getConnection()->select();
9182
$select->distinct()
9283
->from(
93-
['search_index' => $this->indexerEavFrontendResource->getMainTable()],
84+
['search_index' => $this->resource->getTableName('catalog_product_index_eav')],
9485
['entity_id' => 'entity_id']
9586
)->where(
9687
$this->resource->getConnection()->quoteInto(
@@ -107,7 +98,7 @@ private function getFulltextSelect()
10798
$select = $this->resource->getConnection()->select();
10899
$select->distinct()
109100
->from(
110-
['eav_index' => $this->indexerEavFrontendResource->getMainTable()],
101+
['eav_index' => $this->resource->getTableName('catalog_product_index_eav')],
111102
['entity_id' => 'entity_id']
112103
)->where(
113104
$this->resource->getConnection()->quoteInto(

0 commit comments

Comments
 (0)