/** * Test addRange method with nested values. */ public function testRangeAggregationAddRangeNested() { $aggregation = new RangeAggregation('test_agg'); $aggregation->setField('test_field'); $aggregation->addRange('10', '10'); $aggregation2 = new RangeAggregation('test_agg_2'); $aggregation2->addRange('20', '20'); $aggregation->addAggregation($aggregation2); $result = ['agg_test_agg' => ['range' => ['field' => 'test_field', 'ranges' => [['from' => '10', 'to' => '10']], 'keyed' => false], 'aggregations' => ['agg_test_agg_2' => ['range' => ['ranges' => [['from' => '20', 'to' => '20']], 'keyed' => false]]]]]; $this->assertEquals($result, $aggregation->toArray()); }
/** * @return Search */ public function getTestSubAggregationsData() { $out = []; // Case 0: top hits aggregation inside ranges. $search = new Search(); $rangeAgg = new RangeAggregation('range'); $rangeAgg->setField('price'); $rangeAgg->addRange(null, 15); $rangeAgg->addRange(15); $topHitsAgg = new TopHitsAggregation('top_hits'); $topHitsAgg->setSort(new Sorts(new Sort('price', Sort::ORDER_DESC))); $rangeAgg->addAggregation($topHitsAgg); $search->addAggregation($rangeAgg); $expectedTopHits = [[1], [2, 3]]; $out[] = [$search, $expectedTopHits]; return $out; }
/** * Test for range aggregation. * * @param array $aggregation * @param array $expectedResult * * @dataProvider getRangeAggregationData */ public function testRangeAggregation($aggregation, $expectedResult) { /** @var Repository $repo */ $repo = $this->getManager()->getRepository('AcmeTestBundle:Product'); $rangeAggregation = new RangeAggregation($aggregation['name']); $rangeAggregation->setField($aggregation['field']); $rangeAggregation->addRange($aggregation['range']['from'], $aggregation['range']['to']); if (!empty($aggregation['agg'])) { $childAgg = $aggregation['agg']; $aggregation2 = new RangeAggregation($childAgg['name']); $aggregation2->setKeyed($childAgg['keyed']); $aggregation2->addRange($childAgg['range']['from'], $childAgg['range']['to'], $childAgg['key']); $rangeAggregation->addAggregation($aggregation2); } $search = $repo->createSearch()->addAggregation($rangeAggregation); $results = $repo->execute($search, Repository::RESULTS_RAW); $this->assertArrayHasKey('aggregations', $results); $this->assertEquals($expectedResult, $results['aggregations']); }