22
33namespace SilverStripe \ForagerBifrost \Adaptors \Requests ;
44
5- use Elastic \EnterpriseSearch \Client ;
6- use SilverStripe \Core \Injector \Injector ;
75use SilverStripe \Forager \Interfaces \Requests \UpdateSynonymRuleAdaptor as PatchSynonymRuleAdaptorInterface ;
6+ use SilverStripe \Forager \Service \IndexConfiguration ;
87use SilverStripe \Forager \Service \Query \SynonymRule as SynonymRuleQuery ;
98use SilverStripe \Forager \Service \Results \SynonymRule as SynonymRuleResult ;
109use SilverStripe \ForagerBifrost \Processors \SynonymRuleProcessor ;
11- use SilverStripe \ForagerBifrost \Service \Requests \UpdateSynonymRule ;
10+ use Silverstripe \Search \Client \Client ;
11+ use Silverstripe \Search \Client \Exception \SynonymRulePutNotFoundException ;
12+ use Silverstripe \Search \Client \Exception \SynonymRulePutUnprocessableEntityException ;
13+ use Silverstripe \Search \Client \Model \SynonymRuleRequest ;
1214
1315class UpdateSynonymRuleAdaptor implements PatchSynonymRuleAdaptorInterface
1416{
@@ -24,24 +26,27 @@ public function setClient(?Client $client): void
2426 $ this ->client = $ client ;
2527 }
2628
29+ /**
30+ * @throws SynonymRulePutNotFoundException
31+ * @throws SynonymRulePutUnprocessableEntityException
32+ */
2733 public function process (
2834 int |string $ synonymCollectionId ,
2935 int |string $ synonymRuleId ,
3036 SynonymRuleQuery $ synonymRule
3137 ): SynonymRuleResult {
32- $ request = Injector:: inst ()-> create (
33- UpdateSynonymRule::class,
34- $ synonymCollectionId ,
35- $ synonymRuleId ,
36- $ synonymRule
37- );
38+ // Silverstripe Search simply uses the engine name as the Synonym Collection ID
39+ $ engineName = IndexConfiguration:: singleton ()-> environmentizeIndex ( $ synonymCollectionId );
40+ // Convert the query into a Silverstripe Search synonym rule string
41+ $ synonyms = SynonymRuleProcessor:: getStringFromQuery ( $ synonymRule );
42+ $ request = new SynonymRuleRequest ();
43+ $ request -> setSynonyms ( $ synonyms );
3844
3945 // Should either be successful or throw an exception, which we'll let fly
40- $ body = $ this ->client ->appSearch ()->createSynonymSet ($ request )->asString ();
41- $ body = json_decode ($ body , true );
46+ $ response = $ this ->client ->synonymRulePut ($ synonymRuleId , $ engineName , $ request );
4247
43- $ synonymRuleResult = SynonymRuleResult::create ($ body [ ' id ' ] );
44- SynonymRuleProcessor::applyStringToResult ($ synonymRuleResult , $ body [ ' synonyms ' ] );
48+ $ synonymRuleResult = SynonymRuleResult::create ($ response -> getId () );
49+ SynonymRuleProcessor::applyStringToResult ($ synonymRuleResult , $ response -> getSynonyms () );
4550
4651 return $ synonymRuleResult ;
4752 }
0 commit comments