/** * Data provider for testGlobalAggregation. * * @return array */ public function getGlobalAggregationData() { $out = []; $results = ['agg_test_agg' => ['doc_count' => 3, 'agg_test_agg2' => ['buckets' => [['key' => '*-40.0', 'to' => 40, 'to_as_string' => '40.0', 'doc_count' => 3]]]]]; $aggregation = new GlobalAggregation('test_agg'); $aggregation2 = new RangeAggregation('test_agg2'); $aggregation2->setField('price'); $aggregation2->addRange(null, 40); $aggregation->addAggregation($aggregation2); // Case #0 global aggregation without query. $out[] = [$aggregation, null, $results, 3]; // Case #1 global aggregation with query. $query = new MatchQuery('title', 'bar'); $out[] = [$aggregation, $query, $results, 1]; return $out; }
/** * @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; }
/** * Data provider for testFilterAggregation(). * * @return array */ public function getFilterAggregationData() { $out = []; // Case #0 Single filter aggregation. $aggregation = new FilterAggregation('test_agg'); $filter = new RegexpFilter('title', 'pizza'); $aggregation->setFilter($filter); $result = ['agg_test_agg' => ['doc_count' => 1]]; $out[] = [$aggregation, $result]; // Case #1 Nested filter aggregation. $aggregation = new FilterAggregation('test_agg'); $filter = new RegexpFilter('title', 'pizza'); $aggregation->setFilter($filter); $aggregation2 = new RangeAggregation('test_agg_2'); $aggregation2->setField('price'); $aggregation2->addRange(10, 20); $aggregation->addAggregation($aggregation2); $result = ['agg_test_agg' => ['doc_count' => 1, 'agg_test_agg_2' => ['buckets' => [['key' => '10.0-20.0', 'from' => 10, 'from_as_string' => '10.0', 'to' => 20, 'to_as_string' => '20.0', 'doc_count' => 1]]]]]; $out[] = [$aggregation, $result]; return $out; }
/** * Tests if RangeAggregation#removeRangeByKey method works as expected. */ public function testRemoveRangeAggregtionByKey() { $manager = $this->getManager(); $repository = $manager->getRepository('AcmeTestBundle:Product'); $range = new RangeAggregation('foo'); $range->setField('price'); $range->setKeyed(true)->addRange(null, 20, 'cheap')->addRange(20, null, 'expensive'); $range->removeRangeByKey('cheap'); $search = $repository->createSearch()->addAggregation($range); $result = $repository->execute($search)->getAggregations()->find('foo'); $out = []; foreach ($result as $key => $value) { $out[$key] = $value->getValue(); } $this->assertEquals(['expensive' => ['from' => 20, 'from_as_string' => '20.0', 'doc_count' => 1]], $out); }
/** * Tests removeRange method. */ public function testRangeAggregationRemoveRange() { $aggregation = new RangeAggregation('foo'); $aggregation->setField('price'); $aggregation->setKeyed(true); $aggregation->addRange(100, 300, 'key'); $aggregation->addRange(500, 700, 'range_2'); $expected = ['field' => 'price', 'keyed' => true, 'ranges' => [['from' => 100, 'to' => 300, 'key' => 'key']]]; $aggregation->removeRange(500, 700); $result = $aggregation->getArray(); $this->assertEquals($result, $expected, 'get expected array of ranges'); $result = $aggregation->removeRange(500, 700); $this->assertFalse($result, 'returns false after removing not-existing range'); }