From b967ee2acaa08efc30fcf57bf51c7110db8c3a2f Mon Sep 17 00:00:00 2001 From: Christian Jost Date: Fri, 6 Apr 2018 15:02:57 +0200 Subject: [PATCH] Add support for multiple bucket sort orders --- CHANGELOG.md | 2 ++ lib/Elastica/Aggregation/Terms.php | 12 ++++++++++++ test/Elastica/Aggregation/TermsTest.php | 21 +++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d2541c38c..b85d8d446d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ All notable changes to this project will be documented in this file based on the ### Added +* Added support for multiple bucket sort orders for aggregations. + ### Improvements diff --git a/lib/Elastica/Aggregation/Terms.php b/lib/Elastica/Aggregation/Terms.php index 9deabb5a5a..b3a4afcafb 100644 --- a/lib/Elastica/Aggregation/Terms.php +++ b/lib/Elastica/Aggregation/Terms.php @@ -20,4 +20,16 @@ public function setOrder($order, $direction) { return $this->setParam('order', [$order => $direction]); } + + /** + * Sets a list of bucket sort orders. + * + * @param array $orders A list of [|"_count"|"_term" => ] definitions. + * + * @return $this + */ + public function setOrders(array $orders) + { + return $this->setParam('order', $orders); + } } diff --git a/test/Elastica/Aggregation/TermsTest.php b/test/Elastica/Aggregation/TermsTest.php index 5e22f8b280..8dd70d5bdc 100644 --- a/test/Elastica/Aggregation/TermsTest.php +++ b/test/Elastica/Aggregation/TermsTest.php @@ -60,4 +60,25 @@ public function testTermsSetOrder() $this->assertEquals('blue', $results['buckets'][2]['key']); } + + /** + * @group functional + */ + public function testTermsSetOrders() + { + $agg = new Terms('terms'); + $agg->setField('color'); + $agg->setOrders([ + ['_count' => 'asc'], // 1. red, 2. green, 3. blue + ['_term' => 'asc'], // 1. green, 2. red, 3. blue + ]); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('terms'); + + $this->assertSame('green', $results['buckets'][0]['key']); + $this->assertSame('red', $results['buckets'][1]['key']); + $this->assertSame('blue', $results['buckets'][2]['key']); + } }