Skip to content

Commit 9ed6647

Browse files
committed
IDBPR-2554 Добавлена возможность передачи query для function_score
1 parent 9bfe58f commit 9ed6647

File tree

5 files changed

+14
-7
lines changed

5 files changed

+14
-7
lines changed

src/Concerns/DecoratesBoolQuery.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Ensi\LaravelElasticQuery\Concerns;
44

55
use Closure;
6+
use Ensi\LaravelElasticQuery\Contracts\DSLAware;
67
use Ensi\LaravelElasticQuery\Contracts\FunctionScoreItem;
78
use Ensi\LaravelElasticQuery\Contracts\FunctionScoreOptions;
89
use Ensi\LaravelElasticQuery\Contracts\MatchOptions;
@@ -155,9 +156,10 @@ public function whereMoreLikeThis(array $fields, MoreLikeThis $likeThis, ?MoreLi
155156

156157
/**
157158
* @param array<FunctionScoreItem> $functions
159+
* @param ?DSLAware $query
158160
* @param ?FunctionScoreOptions $options
159161
*/
160-
public function addFunctionScore(array $functions, ?FunctionScoreOptions $options = null): static
162+
public function addFunctionScore(array $functions, ?DSLAware $query = null, ?FunctionScoreOptions $options = null): static
161163
{
162164
$this->forwardCallTo($this->boolQuery(), __FUNCTION__, func_get_args());
163165

src/Contracts/BoolQuery.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ public function whereMoreLikeThis(array $fields, MoreLikeThis $likeThis, ?MoreLi
4747

4848
/**
4949
* @param array<FunctionScoreItem> $functions
50+
* @param ?DSLAware $query
5051
* @param ?FunctionScoreOptions $options
5152
*/
52-
public function addFunctionScore(array $functions, ?FunctionScoreOptions $options = null): static;
53+
public function addFunctionScore(array $functions, ?DSLAware $query = null, ?FunctionScoreOptions $options = null): static;
5354
}

src/Filtering/BoolQueryBuilder.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Ensi\LaravelElasticQuery\Concerns\SupportsPath;
77
use Ensi\LaravelElasticQuery\Contracts\BoolQuery;
88
use Ensi\LaravelElasticQuery\Contracts\Criteria;
9+
use Ensi\LaravelElasticQuery\Contracts\DSLAware;
910
use Ensi\LaravelElasticQuery\Contracts\FunctionScoreItem;
1011
use Ensi\LaravelElasticQuery\Contracts\FunctionScoreOptions;
1112
use Ensi\LaravelElasticQuery\Contracts\MatchOptions;
@@ -260,11 +261,12 @@ public function whereMoreLikeThis(array $fields, MoreLikeThis $likeThis, ?MoreLi
260261

261262
/**
262263
* @param array<FunctionScoreItem> $functions
264+
* @param ?DSLAware $query
263265
* @param ?FunctionScoreOptions $options
264266
*/
265-
public function addFunctionScore(array $functions, ?FunctionScoreOptions $options = null): static
267+
public function addFunctionScore(array $functions, ?DSLAware $query = null, ?FunctionScoreOptions $options = null): static
266268
{
267-
$this->should->add(new FunctionScore($functions, $options));
269+
$this->should->add(new FunctionScore($functions, $query, $options));
268270

269271
return $this;
270272
}

src/Filtering/Criterias/FunctionScore.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Ensi\LaravelElasticQuery\Filtering\Criterias;
44

55
use Ensi\LaravelElasticQuery\Contracts\Criteria;
6+
use Ensi\LaravelElasticQuery\Contracts\DSLAware;
67
use Ensi\LaravelElasticQuery\Contracts\FunctionScoreItem;
78
use Ensi\LaravelElasticQuery\Contracts\FunctionScoreOptions;
89
use stdClass;
@@ -16,6 +17,7 @@ class FunctionScore implements Criteria
1617
*/
1718
public function __construct(
1819
private array $functions,
20+
private ?DSLAware $query = null,
1921
private ?FunctionScoreOptions $options = null,
2022
) {
2123
array_map(fn ($function) => Assert::isInstanceOfAny($function, [FunctionScoreItem::class]), $functions);
@@ -24,7 +26,7 @@ public function __construct(
2426
public function toDSL(): array
2527
{
2628
$body = [
27-
'query' => ['match_all' => new stdClass()],
29+
'query' => $this->query?->toDSL() ?? ['match_all' => new stdClass()],
2830
'functions' => array_map(fn (FunctionScoreItem $function) => $function->toArray(), $this->functions),
2931
];
3032

tests/IntegrationTests/Search/SearchQueryIntegrationTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
->whereMoreLikeThis(
129129
$fields,
130130
$likeThis,
131-
MoreLikeOptions::make(
131+
options: MoreLikeOptions::make(
132132
minTermFreq: 1,
133133
minDocFreq: 1,
134134
)
@@ -158,7 +158,7 @@
158158
),
159159
),
160160
],
161-
FunctionScoreOptions::make(
161+
options: FunctionScoreOptions::make(
162162
scoreMode: ScoreMode::SUM,
163163
boostMode: BoostMode::SUM
164164
)

0 commit comments

Comments
 (0)