Skip to content

Commit 73ba8cf

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

File tree

4 files changed

+74
-7
lines changed

4 files changed

+74
-7
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ protected function getStemmerConfig()
193193
*
194194
* @throws LocalizedException
195195
*/
196-
private function getSynonymFilter(): array {
196+
private function getSynonymFilter(): array
197+
{
197198
$connection = $this->synonymReader->getConnection();
198199
$select = $connection->select()->from($this->synonymReader->getMainTable(), 'synonyms');
199200
$synonyms = $connection->fetchCol($select);

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,34 @@ class SynonymReaderPlugin
2323
/**
2424
* @param IndexerRegistry $indexerRegistry
2525
*/
26-
public function __construct(IndexerRegistry $indexerRegistry) {
26+
public function __construct(IndexerRegistry $indexerRegistry)
27+
{
2728
$this->indexerRegistry = $indexerRegistry;
2829
}
2930

3031
/**
32+
* Invalidate fulltext index after synonyms create/ update
33+
*
3134
* @param SynonymGroup $subject
3235
* @param AbstractDb $synonymGroup
3336
* @return void
3437
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
3538
*/
36-
public function afterSave(SynonymGroup $subject, AbstractDb $synonymGroup) {
39+
public function afterSave(SynonymGroup $subject, AbstractDb $synonymGroup)
40+
{
3741
$this->invalidateIndexer();
3842
}
3943

4044
/**
45+
* Invalidate fulltext index after synonyms delete
46+
*
4147
* @param SynonymGroup $subject
4248
* @param AbstractDb $synonymGroup
4349
* @return void
4450
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4551
*/
46-
public function afterDelete(SynonymGroup $subject, AbstractDb $synonymGroup) {
52+
public function afterDelete(SynonymGroup $subject, AbstractDb $synonymGroup)
53+
{
4754
$this->invalidateIndexer();
4855
}
4956

@@ -52,7 +59,8 @@ public function afterDelete(SynonymGroup $subject, AbstractDb $synonymGroup) {
5259
*
5360
* @return void
5461
*/
55-
private function invalidateIndexer() {
62+
private function invalidateIndexer()
63+
{
5664
$fulltextIndexer = $this->indexerRegistry->get(Fulltext::INDEXER_ID);
5765
if (!$fulltextIndexer->isScheduled()) {
5866
$fulltextIndexer->invalidate();

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

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99

1010
use Magento\Elasticsearch\Model\Adapter\Index\Builder;
1111
use Magento\Elasticsearch\Model\Adapter\Index\Config\EsConfigInterface;
12+
use Magento\Framework\DB\Select;
1213
use Magento\Framework\Locale\Resolver as LocaleResolver;
1314
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
15+
use Magento\Search\Model\ResourceModel\SynonymReader;
16+
use Magento\Framework\DB\Adapter\AdapterInterface;
1417
use PHPUnit\Framework\MockObject\MockObject;
1518
use PHPUnit\Framework\TestCase;
1619

@@ -31,6 +34,21 @@ class BuilderTest extends TestCase
3134
*/
3235
protected $esConfig;
3336

37+
/**
38+
* @var SynonymReader|MockObject
39+
*/
40+
private $synonymReaderMock;
41+
42+
/**
43+
* @var AdapterInterface|MockObject
44+
*/
45+
private $connectionMock;
46+
47+
/**
48+
* @var Select|MockObject
49+
*/
50+
private $selectMock;
51+
3452
/**
3553
* Setup method
3654
* @return void
@@ -44,18 +62,38 @@ protected function setUp(): void
4462
'getLocale'
4563
])
4664
->getMock();
65+
4766
$this->esConfig = $this->getMockBuilder(
4867
EsConfigInterface::class
4968
)
5069
->disableOriginalConstructor()
5170
->getMock();
5271

72+
$this->synonymReaderMock = $this->getMockBuilder(
73+
SynonymReader::class
74+
)
75+
->disableOriginalConstructor()
76+
->getMock();
77+
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+
5390
$objectManager = new ObjectManagerHelper($this);
5491
$this->model = $objectManager->getObject(
5592
Builder::class,
5693
[
5794
'localeResolver' => $this->localeResolver,
58-
'esConfig' => $this->esConfig
95+
'esConfig' => $this->esConfig,
96+
'synonymReader' => $this->synonymReaderMock
5997
]
6098
);
6199
}
@@ -68,6 +106,11 @@ protected function setUp(): void
68106
*/
69107
public function testBuild($locale)
70108
{
109+
$synonymsArray = [
110+
'mp3,player,sound,audio',
111+
'tv,video,television,screen'
112+
];
113+
71114
$this->localeResolver->expects($this->once())
72115
->method('getLocale')
73116
->willReturn($locale);
@@ -80,6 +123,22 @@ public function testBuild($locale)
80123
'en_US' => 'english',
81124
]);
82125

126+
$this->synonymReaderMock->expects($this->once())
127+
->method('getConnection')
128+
->willReturn($this->connectionMock);
129+
130+
$this->connectionMock->expects($this->once())
131+
->method('select')
132+
->willReturn($this->selectMock);
133+
134+
$this->selectMock->expects($this->once())
135+
->method('from')
136+
->willReturn($this->selectMock);
137+
138+
$this->connectionMock->expects($this->once())
139+
->method('fetchCol')
140+
->willReturn($synonymsArray);
141+
83142
$result = $this->model->build();
84143
$this->assertNotNull($result);
85144
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,6 @@
308308
<arguments>
309309
<argument name="preprocessorContainer" xsi:type="array">
310310
<item name="stopwordsPreprocessor" xsi:type="object">Magento\Elasticsearch\SearchAdapter\Query\Preprocessor\Stopwords</item>
311-
<item name="synonymsPreprocessor" xsi:type="object">Magento\Search\Adapter\Query\Preprocessor\Synonyms</item>
312311
</argument>
313312
</arguments>
314313
</type>

0 commit comments

Comments
 (0)