From db57301ddd5f0841a9e4c1c211ec96537a15d663 Mon Sep 17 00:00:00 2001 From: Bohuslav Simek <bohuslav.simek@intraworlds.com> Date: Sun, 26 May 2019 11:47:04 +0200 Subject: [PATCH] Add suport for size and after property into composite aggregation --- .../Bucketing/CompositeAggregation.php | 66 ++++++++++++++++++- .../Bucketing/CompositeAggregationTest.php | 48 ++++++++++++++ 2 files changed, 113 insertions(+), 1 deletion(-) diff --git a/src/Aggregation/Bucketing/CompositeAggregation.php b/src/Aggregation/Bucketing/CompositeAggregation.php index d36c900..5489efc 100644 --- a/src/Aggregation/Bucketing/CompositeAggregation.php +++ b/src/Aggregation/Bucketing/CompositeAggregation.php @@ -29,6 +29,16 @@ class CompositeAggregation extends AbstractAggregation */ private $sources = []; + /** + * @var int + */ + private $size; + + /** + * @var array + */ + private $after; + /** * Inner aggregations container init. * @@ -65,9 +75,19 @@ class CompositeAggregation extends AbstractAggregation */ public function getArray() { - return [ + $array = [ 'sources' => $this->sources, ]; + + if ($this->size !== null) { + $array['size'] = $this->size; + } + + if (!empty($this->after)) { + $array['after'] = $this->after; + } + + return $array; } /** @@ -77,4 +97,48 @@ class CompositeAggregation extends AbstractAggregation { return 'composite'; } + + /** + * Sets size + * + * @param int $size Size + * + * @return void + */ + public function setSize($size) + { + $this->size = $size; + } + + /** + * Returns size + * + * @return int + */ + public function getSize() + { + return $this->size; + } + + /** + * Sets after + * + * @param array $after After + * + * @return void + */ + public function setAfter(array $after) + { + $this->after = $after; + } + + /** + * Returns after + * + * @return array + */ + public function getAfter() + { + return $this->after; + } } diff --git a/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php b/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php index d109532..b3bd625 100644 --- a/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php +++ b/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php @@ -38,6 +38,54 @@ class CompositeAggregationTest extends \PHPUnit\Framework\TestCase $this->assertEquals($expectedResult, $compositeAgg->toArray()); } + /** + * Test for composite aggregation toArray() method with size and after part. + */ + public function testToArrayWithSizeAndAfter() + { + $compositeAgg = new CompositeAggregation('composite_test_agg'); + $termsAgg = new TermsAggregation('test_term_agg', 'test_field'); + $compositeAgg->addSource($termsAgg); + $compositeAgg->setSize(5); + $compositeAgg->setAfter(['test_term_agg' => 'test']); + + $expectedResult = [ + 'composite' => [ + 'sources' => [ + [ + 'test_term_agg' => [ 'terms' => ['field' => 'test_field'] ], + ] + ], + 'size' => 5, + 'after' => ['test_term_agg' => 'test'] + ], + ]; + + $this->assertEquals($expectedResult, $compositeAgg->toArray()); + } + + /** + * Test for composite aggregation getSize() method. + */ + public function testGetSize() + { + $compositeAgg = new CompositeAggregation('composite_test_agg'); + $compositeAgg->setSize(5); + + $this->assertEquals(5, $compositeAgg->getSize()); + } + + /** + * Test for composite aggregation getAfter() method. + */ + public function testGetAfter() + { + $compositeAgg = new CompositeAggregation('composite_test_agg'); + $compositeAgg->setAfter(['test_term_agg' => 'test']); + + $this->assertEquals(['test_term_agg' => 'test'], $compositeAgg->getAfter()); + } + /** * Tests getType method. */ -- GitLab