Skip to content

Commit e32faf2

Browse files
committed
ACP2E-99: "Search Synonyms" no longer works when value is added in "Minimum Terms to Match"
1 parent a4e30bf commit e32faf2

File tree

5 files changed

+30
-135
lines changed

5 files changed

+30
-135
lines changed

app/code/Magento/Elasticsearch/Model/Adapter/Index/Builder.php

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
namespace Magento\Elasticsearch\Model\Adapter\Index;
77

8-
use Magento\Framework\Exception\LocalizedException;
98
use Magento\Framework\Locale\Resolver as LocaleResolver;
109
use Magento\Elasticsearch\Model\Adapter\Index\Config\EsConfigInterface;
1110
use Magento\Search\Model\ResourceModel\SynonymReader;
@@ -60,7 +59,7 @@ public function build()
6059
$tokenizer = $this->getTokenizer();
6160
$filter = $this->getFilter();
6261
$charFilter = $this->getCharFilter();
63-
$synonymFilter = $this->getSynonymFilter();
62+
$synonymFilter = $this->synonymReader->getSynonymFilter();
6463

6564
$settings = [
6665
'analysis' => [
@@ -187,29 +186,4 @@ protected function getStemmerConfig()
187186
'language' => $stemmerInfo['default'],
188187
];
189188
}
190-
191-
/**
192-
* Get filter based on defined synonyms
193-
*
194-
* @throws LocalizedException
195-
*/
196-
private function getSynonymFilter(): array
197-
{
198-
$connection = $this->synonymReader->getConnection();
199-
$select = $connection->select()->from($this->synonymReader->getMainTable(), 'synonyms');
200-
$synonyms = $connection->fetchCol($select);
201-
202-
$synonymFilter = [];
203-
204-
if ($synonyms) {
205-
$synonymFilter = [
206-
'synonyms' => [
207-
'type' => 'synonym_graph',
208-
'synonyms' => $synonyms
209-
]
210-
];
211-
}
212-
213-
return $synonymFilter;
214-
}
215189
}

app/code/Magento/Elasticsearch/Model/Indexer/Fulltext/Plugin/Search/Model/SynonymReaderPlugin.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ public function afterDelete(SynonymGroup $subject, AbstractDb $synonymGroup)
6262
private function invalidateIndexer()
6363
{
6464
$fulltextIndexer = $this->indexerRegistry->get(Fulltext::INDEXER_ID);
65-
if (!$fulltextIndexer->isScheduled()) {
66-
$fulltextIndexer->invalidate();
67-
}
65+
$fulltextIndexer->invalidate();
6866
}
6967
}

app/code/Magento/Elasticsearch/Test/Unit/Model/Adapter/Index/BuilderTest.php

Lines changed: 2 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99

1010
use Magento\Elasticsearch\Model\Adapter\Index\Builder;
1111
use Magento\Elasticsearch\Model\Adapter\Index\Config\EsConfigInterface;
12-
use Magento\Framework\DB\Select;
1312
use Magento\Framework\Locale\Resolver as LocaleResolver;
1413
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
1514
use Magento\Search\Model\ResourceModel\SynonymReader;
16-
use Magento\Framework\DB\Adapter\AdapterInterface;
1715
use PHPUnit\Framework\MockObject\MockObject;
1816
use PHPUnit\Framework\TestCase;
1917

@@ -39,16 +37,6 @@ class BuilderTest extends TestCase
3937
*/
4038
private $synonymReaderMock;
4139

42-
/**
43-
* @var AdapterInterface|MockObject
44-
*/
45-
private $connectionMock;
46-
47-
/**
48-
* @var Select|MockObject
49-
*/
50-
private $selectMock;
51-
5240
/**
5341
* Setup method
5442
* @return void
@@ -75,30 +63,6 @@ protected function setUp(): void
7563
->disableOriginalConstructor()
7664
->getMock();
7765

78-
$this->connectionMock = $this->getMockBuilder(
79-
AdapterInterface::class
80-
)
81-
->disableOriginalConstructor()
82-
->getMock();
83-
84-
$this->selectMock = $this->getMockBuilder(
85-
Select::class
86-
)
87-
->disableOriginalConstructor()
88-
->getMock();
89-
90-
$this->synonymReaderMock->expects($this->once())
91-
->method('getConnection')
92-
->willReturn($this->connectionMock);
93-
94-
$this->connectionMock->expects($this->once())
95-
->method('select')
96-
->willReturn($this->selectMock);
97-
98-
$this->selectMock->expects($this->once())
99-
->method('from')
100-
->willReturn($this->selectMock);
101-
10266
$this->esConfig->expects($this->once())
10367
->method('getStemmerInfo')
10468
->willReturn([
@@ -134,9 +98,8 @@ public function testBuildWithoutSynonymsProvided(string $locale)
13498
$this->localeResolver->expects($this->once())
13599
->method('getLocale')
136100
->willReturn($locale);
137-
138-
$this->connectionMock->expects($this->once())
139-
->method('fetchCol')
101+
$this->synonymReaderMock->expects($this->once())
102+
->method('getSynonymFilter')
140103
->willReturn([]);
141104

142105
$result = $this->model->build();
@@ -162,65 +125,6 @@ public function testBuildWithoutSynonymsProvided(string $locale)
162125
);
163126
}
164127

165-
/**
166-
* Test build() method with synonyms provided.
167-
*
168-
* In this case synonyms filter should be created, populated with the list of available synonyms
169-
* and referenced in the prefix_search and sku_prefix_search analyzers.
170-
*
171-
* @param string $locale
172-
* @dataProvider buildDataProvider
173-
*/
174-
public function testBuildWithProvidedSynonyms(string $locale)
175-
{
176-
$synonymsFilterName = 'synonyms';
177-
178-
$synonyms = [
179-
'mp3,player,sound,audio',
180-
'tv,video,television,screen'
181-
];
182-
183-
$expectedFilter = [
184-
'type' => 'synonym_graph',
185-
'synonyms' => $synonyms
186-
];
187-
188-
$this->localeResolver->expects($this->once())
189-
->method('getLocale')
190-
->willReturn($locale);
191-
192-
$this->connectionMock->expects($this->once())
193-
->method('fetchCol')
194-
->willReturn($synonyms);
195-
196-
$result = $this->model->build();
197-
198-
$analysisFilters = $result["analysis"]["filter"];
199-
$prefixSearchAnalyzerFilters = $result["analysis"]["analyzer"]["prefix_search"]["filter"];
200-
$skuPrefixSearchAnalyzerFilters = $result["analysis"]["analyzer"]["sku_prefix_search"]["filter"];
201-
202-
$this->assertArrayHasKey(
203-
$synonymsFilterName,
204-
$analysisFilters,
205-
'Analysis filters must contain synonyms when defined'
206-
);
207-
$this->assertContains(
208-
$expectedFilter,
209-
$analysisFilters,
210-
'Analysis synonyms filter must match the expected result'
211-
);
212-
$this->assertContains(
213-
$synonymsFilterName,
214-
$prefixSearchAnalyzerFilters,
215-
'The prefix_search analyzer must include synonyms filter'
216-
);
217-
$this->assertContains(
218-
$synonymsFilterName,
219-
$skuPrefixSearchAnalyzerFilters,
220-
'The sku_prefix_search analyzer must include synonyms filter'
221-
);
222-
}
223-
224128
/**
225129
* @return array
226130
*/

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,13 +304,6 @@
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\MatchQuery">
308-
<arguments>
309-
<argument name="preprocessorContainer" xsi:type="array">
310-
<item name="stopwordsPreprocessor" xsi:type="object">Magento\Elasticsearch\SearchAdapter\Query\Preprocessor\Stopwords</item>
311-
</argument>
312-
</arguments>
313-
</type>
314307
<type name="Magento\Elasticsearch\SearchAdapter\Query\Preprocessor\Stopwords">
315308
<arguments>
316309
<argument name="stopwordsModule" xsi:type="string">Magento_Elasticsearch</argument>

app/code/Magento/Search/Model/ResourceModel/SynonymReader.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace Magento\Search\Model\ResourceModel;
88

99
use Magento\Framework\DB\Helper\Mysql\Fulltext;
10+
use Magento\Framework\Exception\LocalizedException;
1011
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
1112
use Magento\Store\Model\StoreManagerInterface;
1213

@@ -67,6 +68,31 @@ public function loadByPhrase(\Magento\Search\Model\SynonymReader $object, $phras
6768
return $this;
6869
}
6970

71+
/**
72+
* Get all synonyms as array
73+
*
74+
* @throws LocalizedException
75+
*/
76+
public function getSynonymFilter(): array
77+
{
78+
$connection = $this->getConnection();
79+
$select = $connection->select()->from($this->getMainTable(), 'synonyms');
80+
$synonyms = $connection->fetchCol($select);
81+
82+
$synonymFilter = [];
83+
84+
if ($synonyms) {
85+
$synonymFilter = [
86+
'synonyms' => [
87+
'type' => 'synonym_graph',
88+
'synonyms' => $synonyms
89+
]
90+
];
91+
}
92+
93+
return $synonymFilter;
94+
}
95+
7096
/**
7197
* Init resource data
7298
*

0 commit comments

Comments
 (0)