diff --git a/src/Aggregation/Bucketing/CompositeAggregation.php b/src/Aggregation/Bucketing/CompositeAggregation.php index d36c9007b805d9ef70bc4d67962258a3dad266c5..5489efc90eff8ca6d157d10bfc1ab963f75a7608 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 d10953206ec4b4070f4b4e60450eec1d6e89e72d..b3bd6253cc84f39409200cfd732ec90cd9ce64ee 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. */