Skip to content

Commit b4b3c15

Browse files
committed
CE-33626: Refactored codebase to eliminate reserved keyword "match" from code
1 parent f8ce412 commit b4b3c15

File tree

12 files changed

+200
-147
lines changed

12 files changed

+200
-147
lines changed

app/code/Magento/Elasticsearch/Elasticsearch5/SearchAdapter/Mapper.php

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Elasticsearch\Elasticsearch5\SearchAdapter;
78

8-
use Magento\Framework\Search\RequestInterface;
9-
use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
10-
use Magento\Framework\Search\Request\Query\BoolExpression as BoolQuery;
11-
use Magento\Framework\Search\Request\Query\Filter as FilterQuery;
12-
use Magento\Framework\Search\Request\Query\Match as MatchQuery;
9+
use InvalidArgumentException;
1310
use Magento\Elasticsearch\Elasticsearch5\SearchAdapter\Query\Builder as QueryBuilder;
14-
use Magento\Elasticsearch\SearchAdapter\Query\Builder\Match as MatchQueryBuilder;
1511
use Magento\Elasticsearch\SearchAdapter\Filter\Builder as FilterBuilder;
12+
use Magento\Elasticsearch\SearchAdapter\Query\Builder\MatchQuery as MatchQueryBuilder;
13+
use Magento\Framework\Search\Request\Query\BoolExpression as BoolQuery;
14+
use Magento\Framework\Search\Request\Query\Filter as FilterQuery;
15+
use Magento\Framework\Search\Request\Query\MatchQuery;
16+
use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
17+
use Magento\Framework\Search\RequestInterface;
1618

1719
/**
18-
* Mapper class
20+
* Mapper class for Elasticsearch5
21+
*
1922
* @api
2023
* @since 100.2.2
2124
*/
@@ -77,8 +80,7 @@ public function buildQuery(RequestInterface $request)
7780
$searchQuery['body']['query']['bool']['minimum_should_match'] = 1;
7881
}
7982

80-
$searchQuery = $this->queryBuilder->initAggregations($request, $searchQuery);
81-
return $searchQuery;
83+
return $this->queryBuilder->initAggregations($request, $searchQuery);
8284
}
8385

8486
/**
@@ -88,7 +90,7 @@ public function buildQuery(RequestInterface $request)
8890
* @param array $selectQuery
8991
* @param string $conditionType
9092
* @return array
91-
* @throws \InvalidArgumentException
93+
* @throws InvalidArgumentException
9294
* @since 100.2.2
9395
*/
9496
protected function processQuery(
@@ -114,7 +116,10 @@ protected function processQuery(
114116
$selectQuery = $this->processFilterQuery($requestQuery, $selectQuery, $conditionType);
115117
break;
116118
default:
117-
throw new \InvalidArgumentException(sprintf('Unknown query type \'%s\'', $requestQuery->getType()));
119+
throw new InvalidArgumentException(sprintf(
120+
'Unknown query type \'%s\'',
121+
$requestQuery->getType()
122+
));
118123
}
119124

120125
return $selectQuery;
@@ -197,7 +202,7 @@ private function processFilterQuery(
197202
$filterQuery = $this->filterBuilder->build($query->getReference(), $conditionType);
198203
foreach ($filterQuery['bool'] as $condition => $filter) {
199204
$selectQuery['bool'][$condition]= array_merge(
200-
isset($selectQuery['bool'][$condition]) ? $selectQuery['bool'][$condition] : [],
205+
$selectQuery['bool'][$condition] ?? [],
201206
$filter
202207
);
203208
}

app/code/Magento/Elasticsearch/SearchAdapter/Mapper.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
namespace Magento\Elasticsearch\SearchAdapter;
99

10-
use Magento\Framework\Search\RequestInterface;
11-
use Magento\Framework\Search\Request\Query\BoolExpression as BoolQuery;
12-
use Magento\Elasticsearch\SearchAdapter\Query\Builder as QueryBuilder;
13-
use Magento\Elasticsearch\SearchAdapter\Query\Builder\Match as MatchQueryBuilder;
14-
use Magento\Elasticsearch\SearchAdapter\Filter\Builder as FilterBuilder;
1510
use Magento\Elasticsearch\Elasticsearch5\SearchAdapter\Mapper as Elasticsearch5Mapper;
11+
use Magento\Elasticsearch\SearchAdapter\Filter\Builder as FilterBuilder;
12+
use Magento\Elasticsearch\SearchAdapter\Query\Builder as QueryBuilder;
13+
use Magento\Elasticsearch\SearchAdapter\Query\Builder\MatchQuery as MatchQueryBuilder;
14+
use Magento\Framework\Search\Request\Query\BoolExpression as BoolQuery;
15+
use Magento\Framework\Search\RequestInterface;
1616

1717
/**
1818
* Mapper class for Elasticsearch2
@@ -59,7 +59,6 @@ public function buildQuery(RequestInterface $request)
5959

6060
$searchQuery['body']['query']['bool']['minimum_should_match'] = 1;
6161

62-
$searchQuery = $this->queryBuilder->initAggregations($request, $searchQuery);
63-
return $searchQuery;
62+
return $this->queryBuilder->initAggregations($request, $searchQuery);
6463
}
6564
}

app/code/Magento/Elasticsearch/SearchAdapter/Query/Builder/Match.php renamed to app/code/Magento/Elasticsearch/SearchAdapter/Query/Builder/MatchQuery.php

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,26 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Elasticsearch\SearchAdapter\Query\Builder;
78

89
use Magento\Elasticsearch\Model\Adapter\FieldMapper\Product\AttributeProvider;
910
use Magento\Elasticsearch\Model\Adapter\FieldMapper\Product\FieldProvider\FieldType\ResolverInterface as TypeResolver;
11+
use Magento\Elasticsearch\Model\Adapter\FieldMapperInterface;
1012
use Magento\Elasticsearch\Model\Config;
1113
use Magento\Elasticsearch\SearchAdapter\Query\ValueTransformerPool;
1214
use Magento\Framework\Search\Request\Query\BoolExpression;
1315
use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
14-
use Magento\Elasticsearch\Model\Adapter\FieldMapperInterface;
15-
use Magento\Framework\Search\Adapter\Preprocessor\PreprocessorInterface;
1616

1717
/**
18-
* Builder for match query.
18+
* Builder for match query
1919
*/
20-
class Match implements QueryInterface
20+
class MatchQuery implements QueryInterface
2121
{
2222
/**
2323
* Elasticsearch condition for case when query must not appear in the matching documents.
2424
*/
25-
const QUERY_CONDITION_MUST_NOT = 'must_not';
25+
public const QUERY_CONDITION_MUST_NOT = 'must_not';
2626

2727
/**
2828
* @var FieldMapperInterface
@@ -43,6 +43,7 @@ class Match implements QueryInterface
4343
* @var ValueTransformerPool
4444
*/
4545
private $valueTransformerPool;
46+
4647
/**
4748
* @var Config
4849
*/
@@ -78,6 +79,7 @@ public function build(array $selectQuery, RequestQueryInterface $requestQuery, $
7879
$queries = $this->buildQueries($requestQuery->getMatches(), $queryValue);
7980
$requestQueryBoost = $requestQuery->getBoost() ?: 1;
8081
$minimumShouldMatch = $this->config->getElasticsearchConfigData('minimum_should_match');
82+
8183
foreach ($queries as $query) {
8284
$queryBody = $query['body'];
8385
$matchKey = array_keys($queryBody)[0];
@@ -95,24 +97,26 @@ public function build(array $selectQuery, RequestQueryInterface $requestQuery, $
9597
}
9698

9799
/**
98-
* Prepare query.
100+
* Prepare query
99101
*
100102
* @param string $queryValue
101103
* @param string $conditionType
102104
* @return array
103105
*/
104-
protected function prepareQuery($queryValue, $conditionType)
106+
private function prepareQuery(string $queryValue, string $conditionType): array
105107
{
106-
$condition = $conditionType === BoolExpression::QUERY_CONDITION_NOT ?
107-
self::QUERY_CONDITION_MUST_NOT : $conditionType;
108+
$condition = $conditionType === BoolExpression::QUERY_CONDITION_NOT
109+
? self::QUERY_CONDITION_MUST_NOT
110+
: $conditionType;
111+
108112
return [
109113
'condition' => $condition,
110114
'value' => $queryValue,
111115
];
112116
}
113117

114118
/**
115-
* Creates valid ElasticSearch search conditions from Match queries.
119+
* Creates valid ElasticSearch search conditions from Match queries
116120
*
117121
* The purpose of this method is to create a structure which represents valid search query
118122
* for a full-text search.
@@ -125,30 +129,31 @@ protected function prepareQuery($queryValue, $conditionType)
125129
* @param array $queryValue
126130
* @return array
127131
*/
128-
protected function buildQueries(array $matches, array $queryValue)
132+
private function buildQueries(array $matches, array $queryValue): array
129133
{
130134
$conditions = [];
131135

132136
// Checking for quoted phrase \"phrase test\", trim escaped surrounding quotes if found
133137
$count = 0;
134138
$value = preg_replace('#^"(.*)"$#m', '$1', $queryValue['value'], -1, $count);
135139
$condition = ($count) ? 'match_phrase' : 'match';
136-
137140
$transformedTypes = [];
141+
138142
foreach ($matches as $match) {
139143
$resolvedField = $this->fieldMapper->getFieldName(
140144
$match['field'],
141145
['type' => FieldMapperInterface::TYPE_QUERY]
142146
);
143-
144147
$attributeAdapter = $this->attributeProvider->getByAttributeCode($resolvedField);
145148
$fieldType = $this->fieldTypeResolver->getFieldType($attributeAdapter);
146149
$valueTransformer = $this->valueTransformerPool->get($fieldType ?? 'text');
147150
$valueTransformerHash = \spl_object_hash($valueTransformer);
151+
148152
if (!isset($transformedTypes[$valueTransformerHash])) {
149153
$transformedTypes[$valueTransformerHash] = $valueTransformer->transform($value);
150154
}
151155
$transformedValue = $transformedTypes[$valueTransformerHash];
156+
152157
if (null === $transformedValue) {
153158
//Value is incompatible with this field type.
154159
continue;
@@ -159,6 +164,7 @@ protected function buildQueries(array $matches, array $queryValue)
159164
'query' => $transformedValue,
160165
'boost' => $match['boost'] ?? 1,
161166
];
167+
162168
if (isset($match['analyzer'])) {
163169
$fields[$resolvedField]['analyzer'] = $match['analyzer'];
164170
}

app/code/Magento/Elasticsearch/Test/Unit/SearchAdapter/MapperTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77

88
namespace Magento\Elasticsearch\Test\Unit\SearchAdapter;
99

10+
use InvalidArgumentException;
1011
use Magento\Elasticsearch\SearchAdapter\Filter\Builder as FilterBuilder;
1112
use Magento\Elasticsearch\SearchAdapter\Mapper;
1213
use Magento\Elasticsearch\SearchAdapter\Query\Builder as QueryBuilder;
13-
use Magento\Elasticsearch\SearchAdapter\Query\Builder\Match as MatchQueryBuilder;
14+
use Magento\Elasticsearch\SearchAdapter\Query\Builder\MatchQuery as MatchQueryBuilder;
1415
use Magento\Framework\Search\Request\FilterInterface;
1516
use Magento\Framework\Search\Request\Query\BoolExpression;
1617
use Magento\Framework\Search\Request\Query\Filter;
18+
use Magento\Framework\Search\Request\Query\MatchQuery;
1719
use Magento\Framework\Search\Request\QueryInterface;
1820
use Magento\Framework\Search\RequestInterface;
1921
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
@@ -51,20 +53,18 @@ class MapperTest extends TestCase
5153
*/
5254
protected function setUp(): void
5355
{
54-
$this->queryBuilder = $this->getMockBuilder(\Magento\Elasticsearch\SearchAdapter\Query\Builder::class)
56+
$this->queryBuilder = $this->getMockBuilder(QueryBuilder::class)
5557
->setMethods([
5658
'initQuery',
5759
'initAggregations',
5860
])
5961
->disableOriginalConstructor()
6062
->getMock();
61-
$this->matchQueryBuilder = $this->getMockBuilder(
62-
\Magento\Elasticsearch\SearchAdapter\Query\Builder\Match::class
63-
)
63+
$this->matchQueryBuilder = $this->getMockBuilder(MatchQueryBuilder::class)
6464
->setMethods(['build'])
6565
->disableOriginalConstructor()
6666
->getMock();
67-
$this->filterBuilder = $this->getMockBuilder(\Magento\Elasticsearch\SearchAdapter\Filter\Builder::class)
67+
$this->filterBuilder = $this->getMockBuilder(FilterBuilder::class)
6868
->disableOriginalConstructor()
6969
->getMock();
7070
$this->queryBuilder->expects($this->any())
@@ -101,7 +101,7 @@ protected function setUp(): void
101101
*/
102102
public function testBuildQueryFailure()
103103
{
104-
$this->expectException(\InvalidArgumentException::class);
104+
$this->expectException(InvalidArgumentException::class);
105105

106106
$request = $this->getMockBuilder(RequestInterface::class)
107107
->disableOriginalConstructor()
@@ -137,7 +137,7 @@ public function testBuildQuery($queryType, $queryMock, $referenceType, $filterMo
137137
->setMethods(['getMust', 'getMustNot', 'getType', 'getShould', 'getReferenceType', 'getReference'])
138138
->disableOriginalConstructor()
139139
->getMock();
140-
$matchQuery = $this->getMockBuilder(\Magento\Framework\Search\Request\Query\Match::class)
140+
$matchQuery = $this->getMockBuilder(MatchQuery::class)
141141
->disableOriginalConstructor()
142142
->getMock();
143143
$filterQuery = $this->getMockBuilder($filterMock)
@@ -192,7 +192,7 @@ public function buildQueryDataProvider()
192192
{
193193
return [
194194
[
195-
'matchQuery', \Magento\Framework\Search\Request\Query\Match::class,
195+
'matchQuery', MatchQuery::class,
196196
'query', QueryInterface::class,
197197
],
198198
[

app/code/Magento/Elasticsearch/Test/Unit/SearchAdapter/Query/Builder/MatchTest.php renamed to app/code/Magento/Elasticsearch/Test/Unit/SearchAdapter/Query/Builder/MatchQueryTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@
1212
use Magento\Elasticsearch\Model\Adapter\FieldMapper\Product\FieldProvider\FieldType\ResolverInterface as TypeResolver;
1313
use Magento\Elasticsearch\Model\Adapter\FieldMapperInterface;
1414
use Magento\Elasticsearch\Model\Config;
15-
use Magento\Elasticsearch\SearchAdapter\Query\Builder\Match as MatchQueryBuilder;
15+
use Magento\Elasticsearch\SearchAdapter\Query\Builder\MatchQuery as MatchQueryBuilder;
1616
use Magento\Elasticsearch\SearchAdapter\Query\ValueTransformerInterface;
1717
use Magento\Elasticsearch\SearchAdapter\Query\ValueTransformerPool;
18-
use Magento\Framework\Search\Request\Query\Match as MatchRequestQuery;
18+
use Magento\Framework\Search\Request\Query\MatchQuery;
1919
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
2020
use PHPUnit\Framework\MockObject\MockObject;
2121
use PHPUnit\Framework\TestCase;
2222

2323
/**
2424
* Test Match query builder
2525
*/
26-
class MatchTest extends TestCase
26+
class MatchQueryTest extends TestCase
2727
{
2828
/**
2929
* @var AttributeProvider|MockObject
@@ -102,7 +102,7 @@ public function testBuild(
102102
$this->mockAttribute($field['field']);
103103
}
104104

105-
$requestQuery = new MatchRequestQuery('match', $searchQuery, 1, $fields);
105+
$requestQuery = new MatchQuery('match', $searchQuery, 1, $fields);
106106
$query = $this->matchQueryBuilder->build([], $requestQuery, 'should');
107107

108108
$expectedSelectQuery = [

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@
304304
<type name="Magento\Framework\Indexer\Config\DependencyInfoProvider">
305305
<plugin name="indexerDependencyUpdaterPlugin" type="Magento\Elasticsearch\Model\Indexer\Plugin\DependencyUpdaterPlugin"/>
306306
</type>
307-
<type name="Magento\Elasticsearch\SearchAdapter\Query\Builder\Match">
307+
<type name="Magento\Elasticsearch\SearchAdapter\Query\Builder\MatchQuery">
308308
<arguments>
309309
<argument name="preprocessorContainer" xsi:type="array">
310310
<item name="stopwordsPreprocessor" xsi:type="object">Magento\Elasticsearch\SearchAdapter\Query\Preprocessor\Stopwords</item>

0 commit comments

Comments
 (0)