@@ -183,6 +183,13 @@ class ScoreStrategy implements HttpTransportable
183183 */
184184 private $ filter ;
185185
186+ /**
187+ * Filters.
188+ *
189+ * @var Filter[]
190+ */
191+ private $ filters = [];
192+
186193 /**
187194 * @var float
188195 *
@@ -256,6 +263,14 @@ public function getFilter(): ? Filter
256263 return $ this ->filter ;
257264 }
258265
266+ /**
267+ * @return Filter[]
268+ */
269+ public function getFilters (): array
270+ {
271+ return $ this ->filters ;
272+ }
273+
259274 /**
260275 * Create empty.
261276 *
@@ -267,8 +282,6 @@ public static function createDefault(): ScoreStrategy
267282 }
268283
269284 /**
270- * Create default field scoring.
271- *
272285 * @param string $field
273286 * @param float $factor
274287 * @param float $missing
@@ -302,8 +315,6 @@ public static function createFieldBoosting(
302315 }
303316
304317 /**
305- * Create custom function scoring.
306- *
307318 * @param string $function
308319 * @param float $weight
309320 * @param Filter $filter
@@ -328,8 +339,6 @@ public static function createCustomFunction(
328339 }
329340
330341 /**
331- * Create custom function scoring.
332- *
333342 * @param float $weight
334343 * @param Filter $filter
335344 * @param bool $matchMainQuery
@@ -350,6 +359,29 @@ public static function createWeightFunction(
350359 return $ scoreStrategy ;
351360 }
352361
362+ /**
363+ * @param float $weight
364+ * @param Filter[] $filters
365+ * @param bool $matchMainQuery
366+ *
367+ * @return ScoreStrategy
368+ */
369+ public static function createWeightMultiFilterFunction (
370+ float $ weight = self ::DEFAULT_WEIGHT ,
371+ array $ filters = [],
372+ bool $ matchMainQuery = true
373+ ): ScoreStrategy {
374+ $ scoreStrategy = self ::createDefault ();
375+ $ scoreStrategy ->type = 'weight ' ;
376+ $ scoreStrategy ->weight = $ weight ;
377+ $ scoreStrategy ->filters = array_map (function (Filter $ filter ) {
378+ return self ::fixFilterFieldPath ($ filter );
379+ }, $ filters );
380+ $ scoreStrategy ->configuration ['match_main_query ' ] = $ matchMainQuery ;
381+
382+ return $ scoreStrategy ;
383+ }
384+
353385 /**
354386 * Create custom function scoring.
355387 *
@@ -427,6 +459,9 @@ public function toArray(): array
427459 ->filter
428460 ->toArray ()
429461 : null ),
462+ 'filters ' => array_map (function (Filter $ filter ) {
463+ return $ filter ->toArray ();
464+ }, $ this ->filters ),
430465 ];
431466 }
432467
@@ -448,6 +483,10 @@ public static function createFromArray(array $array)
448483 ? Filter::createFromArray ($ array ['filter ' ])
449484 : null ;
450485
486+ $ scoreStrategy ->filters = array_map (function (array $ filterAsArray ) {
487+ return Filter::createFromArray ($ filterAsArray );
488+ }, $ array ['filters ' ] ?? []);
489+
451490 return $ scoreStrategy ;
452491 }
453492}
0 commit comments