|
5 | 5 | use Ensi\LaravelElasticQuery\Aggregating\Metrics\MinMaxScoreAggregation; |
6 | 6 | use Ensi\LaravelElasticQuery\Aggregating\Metrics\TopHitsAggregation; |
7 | 7 | use Ensi\LaravelElasticQuery\Aggregating\MinMax; |
| 8 | +use Ensi\LaravelElasticQuery\Aggregating\Range; |
8 | 9 | use Ensi\LaravelElasticQuery\Contracts\AggregationsBuilder; |
9 | 10 | use Ensi\LaravelElasticQuery\Filtering\Criterias\RangeBound; |
10 | 11 | use Ensi\LaravelElasticQuery\Filtering\Criterias\Term; |
|
103 | 104 | assertEquals(2, $results->get('cardinality')); |
104 | 105 | }); |
105 | 106 |
|
| 107 | +test('aggregation query ranges', function () { |
| 108 | + /** @var IntegrationTestCase $this */ |
| 109 | + |
| 110 | + $rangeFromTo = new Range(from: 0, to: 5, key: 'from-0-to-5'); |
| 111 | + $rangeFrom = new Range(from: 7, key: 'from-7'); |
| 112 | + $rangeTo = new Range(to: 8, key: 'to-8'); |
| 113 | + |
| 114 | + $results = ProductsIndex::aggregate() |
| 115 | + ->ranges('ranges', 'rating', [$rangeFromTo, $rangeFrom, $rangeTo]) |
| 116 | + ->get(); |
| 117 | + |
| 118 | + /** @var Bucket $result */ |
| 119 | + foreach ($results as $result) { |
| 120 | + $expected = match ($result->key) { |
| 121 | + 'from-0-to-5' => 2, |
| 122 | + 'from-7' => 3, |
| 123 | + 'to-8' => 4, |
| 124 | + default => null, |
| 125 | + }; |
| 126 | + |
| 127 | + assertEquals($expected, $result->count); |
| 128 | + } |
| 129 | +}); |
| 130 | + |
106 | 131 | test('aggregation query count all', function () { |
107 | 132 | /** @var IntegrationTestCase $this */ |
108 | 133 |
|
|
0 commit comments