From 9ed6647c1914762de1a96c3cb75314fca00bbb14 Mon Sep 17 00:00:00 2001 From: Evgenij Manoylin Date: Tue, 11 Feb 2025 15:28:08 +0300 Subject: [PATCH] =?UTF-8?q?IDBPR-2554=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B8=20query=20=D0=B4=D0=BB=D1=8F=20function=5Fsc?= =?UTF-8?q?ore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Concerns/DecoratesBoolQuery.php | 4 +++- src/Contracts/BoolQuery.php | 3 ++- src/Filtering/BoolQueryBuilder.php | 6 ++++-- src/Filtering/Criterias/FunctionScore.php | 4 +++- .../IntegrationTests/Search/SearchQueryIntegrationTest.php | 4 ++-- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Concerns/DecoratesBoolQuery.php b/src/Concerns/DecoratesBoolQuery.php index fd12b70..ce04194 100644 --- a/src/Concerns/DecoratesBoolQuery.php +++ b/src/Concerns/DecoratesBoolQuery.php @@ -3,6 +3,7 @@ namespace Ensi\LaravelElasticQuery\Concerns; use Closure; +use Ensi\LaravelElasticQuery\Contracts\DSLAware; use Ensi\LaravelElasticQuery\Contracts\FunctionScoreItem; use Ensi\LaravelElasticQuery\Contracts\FunctionScoreOptions; use Ensi\LaravelElasticQuery\Contracts\MatchOptions; @@ -155,9 +156,10 @@ public function whereMoreLikeThis(array $fields, MoreLikeThis $likeThis, ?MoreLi /** * @param array $functions + * @param ?DSLAware $query * @param ?FunctionScoreOptions $options */ - public function addFunctionScore(array $functions, ?FunctionScoreOptions $options = null): static + public function addFunctionScore(array $functions, ?DSLAware $query = null, ?FunctionScoreOptions $options = null): static { $this->forwardCallTo($this->boolQuery(), __FUNCTION__, func_get_args()); diff --git a/src/Contracts/BoolQuery.php b/src/Contracts/BoolQuery.php index 4ab29a8..7d3723a 100644 --- a/src/Contracts/BoolQuery.php +++ b/src/Contracts/BoolQuery.php @@ -47,7 +47,8 @@ public function whereMoreLikeThis(array $fields, MoreLikeThis $likeThis, ?MoreLi /** * @param array $functions + * @param ?DSLAware $query * @param ?FunctionScoreOptions $options */ - public function addFunctionScore(array $functions, ?FunctionScoreOptions $options = null): static; + public function addFunctionScore(array $functions, ?DSLAware $query = null, ?FunctionScoreOptions $options = null): static; } diff --git a/src/Filtering/BoolQueryBuilder.php b/src/Filtering/BoolQueryBuilder.php index 9239fca..49d6daf 100644 --- a/src/Filtering/BoolQueryBuilder.php +++ b/src/Filtering/BoolQueryBuilder.php @@ -6,6 +6,7 @@ use Ensi\LaravelElasticQuery\Concerns\SupportsPath; use Ensi\LaravelElasticQuery\Contracts\BoolQuery; use Ensi\LaravelElasticQuery\Contracts\Criteria; +use Ensi\LaravelElasticQuery\Contracts\DSLAware; use Ensi\LaravelElasticQuery\Contracts\FunctionScoreItem; use Ensi\LaravelElasticQuery\Contracts\FunctionScoreOptions; use Ensi\LaravelElasticQuery\Contracts\MatchOptions; @@ -260,11 +261,12 @@ public function whereMoreLikeThis(array $fields, MoreLikeThis $likeThis, ?MoreLi /** * @param array $functions + * @param ?DSLAware $query * @param ?FunctionScoreOptions $options */ - public function addFunctionScore(array $functions, ?FunctionScoreOptions $options = null): static + public function addFunctionScore(array $functions, ?DSLAware $query = null, ?FunctionScoreOptions $options = null): static { - $this->should->add(new FunctionScore($functions, $options)); + $this->should->add(new FunctionScore($functions, $query, $options)); return $this; } diff --git a/src/Filtering/Criterias/FunctionScore.php b/src/Filtering/Criterias/FunctionScore.php index 4b99029..71f060a 100644 --- a/src/Filtering/Criterias/FunctionScore.php +++ b/src/Filtering/Criterias/FunctionScore.php @@ -3,6 +3,7 @@ namespace Ensi\LaravelElasticQuery\Filtering\Criterias; use Ensi\LaravelElasticQuery\Contracts\Criteria; +use Ensi\LaravelElasticQuery\Contracts\DSLAware; use Ensi\LaravelElasticQuery\Contracts\FunctionScoreItem; use Ensi\LaravelElasticQuery\Contracts\FunctionScoreOptions; use stdClass; @@ -16,6 +17,7 @@ class FunctionScore implements Criteria */ public function __construct( private array $functions, + private ?DSLAware $query = null, private ?FunctionScoreOptions $options = null, ) { array_map(fn ($function) => Assert::isInstanceOfAny($function, [FunctionScoreItem::class]), $functions); @@ -24,7 +26,7 @@ public function __construct( public function toDSL(): array { $body = [ - 'query' => ['match_all' => new stdClass()], + 'query' => $this->query?->toDSL() ?? ['match_all' => new stdClass()], 'functions' => array_map(fn (FunctionScoreItem $function) => $function->toArray(), $this->functions), ]; diff --git a/tests/IntegrationTests/Search/SearchQueryIntegrationTest.php b/tests/IntegrationTests/Search/SearchQueryIntegrationTest.php index edeb72a..b062cc2 100644 --- a/tests/IntegrationTests/Search/SearchQueryIntegrationTest.php +++ b/tests/IntegrationTests/Search/SearchQueryIntegrationTest.php @@ -128,7 +128,7 @@ ->whereMoreLikeThis( $fields, $likeThis, - MoreLikeOptions::make( + options: MoreLikeOptions::make( minTermFreq: 1, minDocFreq: 1, ) @@ -158,7 +158,7 @@ ), ), ], - FunctionScoreOptions::make( + options: FunctionScoreOptions::make( scoreMode: ScoreMode::SUM, boostMode: BoostMode::SUM )