|
2 | 2 |
|
3 | 3 | use Ensi\LaravelElasticQuery\Aggregating\AggregationCollection;
|
4 | 4 | use Ensi\LaravelElasticQuery\Aggregating\Bucket;
|
| 5 | +use Ensi\LaravelElasticQuery\Aggregating\Bucket\ReverseNestedAggregation; |
5 | 6 | use Ensi\LaravelElasticQuery\Aggregating\FiltersCollection;
|
| 7 | +use Ensi\LaravelElasticQuery\Aggregating\Metrics\CardinalityAggregation; |
6 | 8 | use Ensi\LaravelElasticQuery\Aggregating\Metrics\MinMaxScoreAggregation;
|
7 | 9 | use Ensi\LaravelElasticQuery\Aggregating\Metrics\ScriptAggregation;
|
8 | 10 | use Ensi\LaravelElasticQuery\Aggregating\Metrics\TopHitsAggregation;
|
|
263 | 265 | $scores,
|
264 | 266 | );
|
265 | 267 | });
|
| 268 | + |
| 269 | +test('reverse nested aggregation with specific data', function () { |
| 270 | + /** @var IntegrationTestCase $this */ |
| 271 | + |
| 272 | + $results = ProductsIndex::aggregate() |
| 273 | + ->where('active', true) |
| 274 | + ->nested('offers', function ($builder) { |
| 275 | + $reverseAggs = new AggregationCollection(); |
| 276 | + $reverseAggs->add(new CardinalityAggregation( |
| 277 | + 'product_id', |
| 278 | + 'product_id' |
| 279 | + )); |
| 280 | + $reverseNested = new ReverseNestedAggregation('product_info', $reverseAggs); |
| 281 | + |
| 282 | + $compositeAggs = new AggregationCollection(); |
| 283 | + $compositeAggs->add($reverseNested); |
| 284 | + |
| 285 | + $builder->terms('sellers', 'seller_id', 10, composite: $compositeAggs); |
| 286 | + }) |
| 287 | + ->get(); |
| 288 | + |
| 289 | + $sellers = $results->get('sellers'); |
| 290 | + |
| 291 | + $seller10Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 10); |
| 292 | + expect($seller10Bucket)->not->toBeNull(); |
| 293 | + expect($seller10Bucket->getCompositeValue('product_id'))->toBe(3); |
| 294 | + |
| 295 | + $seller15Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 15); |
| 296 | + expect($seller15Bucket)->not->toBeNull(); |
| 297 | + expect($seller15Bucket->getCompositeValue('product_id'))->toBe(3); |
| 298 | + |
| 299 | + $seller20Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 20); |
| 300 | + expect($seller20Bucket)->not->toBeNull(); |
| 301 | + expect($seller20Bucket->getCompositeValue('product_id'))->toBe(3); |
| 302 | + |
| 303 | + $seller90Bucket = $sellers->first(fn (Bucket $bucket) => $bucket->key == 90); |
| 304 | + expect($seller90Bucket)->not->toBeNull(); |
| 305 | + expect($seller90Bucket->getCompositeValue('product_id'))->toBe(1); |
| 306 | +}); |
0 commit comments