Skip to content

Commit c6598fc

Browse files
author
fedorf4
committed
fixes
1 parent 13be186 commit c6598fc

File tree

3 files changed

+30
-30
lines changed

3 files changed

+30
-30
lines changed

src/Concerns/ConstructsAggregations.php

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,21 +133,6 @@ public function nested(string $path, Closure $callback): static
133133
return $this;
134134
}
135135

136-
public function reverseNested(string $name, Closure $callback): static
137-
{
138-
$builder = $this->createCompositeBuilder("{$name}_builder");
139-
140-
/** @var AggregationCollection $aggs */
141-
$aggs = tap($builder, $callback)->build();
142-
143-
if (!$aggs->isEmpty()) {
144-
$reverseNested = new ReverseNestedAggregation($name, $aggs);
145-
$this->aggregations->merge(AggregationCollection::fromAggregation($reverseNested));
146-
}
147-
148-
return $this;
149-
}
150-
151136
protected function name(): string
152137
{
153138
return '';

src/Contracts/AggregationsBuilder.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,4 @@ public function count(string $path, string $field): static;
2828
public function script(string $name, string $aggregationType, string $source, array $params = [], string $lang = ScriptLang::PAINLESS): static;
2929

3030
public function nested(string $path, Closure $callback): static;
31-
32-
public function reverseNested(string $name, Closure $callback): static
3331
}

tests/IntegrationTests/AggregationQueryIntegrationTest.php

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
use Ensi\LaravelElasticQuery\Aggregating\AggregationCollection;
44
use Ensi\LaravelElasticQuery\Aggregating\Bucket;
5-
use Ensi\LaravelElasticQuery\Aggregating\BucketCollection;
5+
use Ensi\LaravelElasticQuery\Aggregating\Bucket\ReverseNestedAggregation;
66
use Ensi\LaravelElasticQuery\Aggregating\FiltersCollection;
7+
use Ensi\LaravelElasticQuery\Aggregating\Metrics\CardinalityAggregation;
78
use Ensi\LaravelElasticQuery\Aggregating\Metrics\MinMaxScoreAggregation;
89
use Ensi\LaravelElasticQuery\Aggregating\Metrics\ScriptAggregation;
910
use Ensi\LaravelElasticQuery\Aggregating\Metrics\TopHitsAggregation;
@@ -264,25 +265,41 @@
264265
);
265266
});
266267

267-
test('reverse nested aggregation query', function () {
268+
test('reverse nested aggregation with specific data', function () {
268269
/** @var IntegrationTestCase $this */
269270

270271
$results = ProductsIndex::aggregate()
272+
->where('active', true)
271273
->nested('offers', function ($builder) {
272-
$builder->terms('offer_prices', 'offers.price', 5)
273-
->reverseNested('root_stats', function ($reverseBuilder) {
274-
$reverseBuilder->cardinality('unique_products', 'product_id')
275-
->count('total_products', 'product_id');
276-
});
274+
$reverseAggs = new AggregationCollection();
275+
$reverseAggs->add(new CardinalityAggregation(
276+
'product_id',
277+
'product_id'
278+
));
279+
$reverseNested = new ReverseNestedAggregation('product_info', $reverseAggs);
280+
281+
$compositeAggs = new AggregationCollection();
282+
$compositeAggs->add($reverseNested);
283+
284+
$builder->terms('sellers', 'seller_id', 10, composite: $compositeAggs);
277285
})
278286
->get();
279287

280-
$prices = $results->get('offer_prices');
288+
$sellers = $results->get('sellers');
281289

282-
expect($prices)->toBeInstanceOf(BucketCollection::class);
290+
$seller10Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 10);
291+
expect($seller10Bucket)->not->toBeNull();
292+
expect($seller10Bucket->getCompositeValue('product_id'))->toBe(3);
283293

284-
foreach ($prices as $bucket) {
285-
expect($bucket->getCompositeValue('unique_products'))->toBeGreaterThan(0);
286-
expect($bucket->getCompositeValue('total_products'))->toBeGreaterThan(0);
287-
}
294+
$seller15Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 15);
295+
expect($seller15Bucket)->not->toBeNull();
296+
expect($seller15Bucket->getCompositeValue('product_id'))->toBe(3);
297+
298+
$seller20Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 20);
299+
expect($seller20Bucket)->not->toBeNull();
300+
expect($seller20Bucket->getCompositeValue('product_id'))->toBe(3);
301+
302+
$seller90Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 90);
303+
expect($seller90Bucket)->not->toBeNull();
304+
expect($seller90Bucket->getCompositeValue('product_id'))->toBe(1);
288305
});

0 commit comments

Comments
 (0)