/** * @group functional */ public function testReverseNestedAggregation() { $agg = new Nested('comments', 'comments'); $names = new Terms('name'); $names->setField('comments.name'); $tags = new Terms('tags'); $tags->setField('tags'); $reverseNested = new ReverseNested('main'); $reverseNested->addAggregation($tags); $names->addAggregation($reverseNested); $agg->addAggregation($names); $query = new Query(); $query->addAggregation($agg); $results = $this->_getIndexForTest()->search($query)->getAggregation('comments'); $this->assertArrayHasKey('name', $results); $nameResults = $results['name']; $this->assertCount(3, $nameResults['buckets']); // bob $this->assertEquals('bob', $nameResults['buckets'][0]['key']); $tags = array(array('key' => 'foo', 'doc_count' => 2), array('key' => 'bar', 'doc_count' => 1), array('key' => 'baz', 'doc_count' => 1)); $this->assertEquals($tags, $nameResults['buckets'][0]['main']['tags']['buckets']); // john $this->assertEquals('john', $nameResults['buckets'][1]['key']); $tags = array(array('key' => 'bar', 'doc_count' => 1), array('key' => 'foo', 'doc_count' => 1)); $this->assertEquals($tags, $nameResults['buckets'][1]['main']['tags']['buckets']); // susan $this->assertEquals('susan', $nameResults['buckets'][2]['key']); $tags = array(array('key' => 'baz', 'doc_count' => 1), array('key' => 'foo', 'doc_count' => 1)); $this->assertEquals($tags, $nameResults['buckets'][2]['main']['tags']['buckets']); }
protected function getStates() { $results = []; $query = new Elastica\Query(); $query->setSize(0); $agg = new Elastica\Aggregation\Nested('states', 'state'); $st_terms = new Elastica\Aggregation\Terms('abbrev'); $st_terms->setField('state.abbrev'); $st_terms->setOrder('_term', 'asc'); $st_terms->setSize(0); $state_terms = new Elastica\Aggregation\Terms('full'); $state_terms->setField('state.full'); $st_terms->addAggregation($state_terms); $agg->addAggregation($st_terms); $query->addAggregation($agg); /* @var $elastica_client Elastica\Client */ $elastica_client = $this->getServiceLocator()->getServiceLocator()->get('elastica-client'); try { /* @var $response \Elastica\Response */ $response = $elastica_client->request('usgeodb/locality/_search?query_cache=true', Request::GET, $query->toArray()); $data = $response->getData(); $aggregations = isset($data['aggregations']['states']['abbrev']['buckets']) ? $data['aggregations']['states']['abbrev']['buckets'] : []; foreach ($aggregations as $aggregation) { $key = strtoupper($aggregation['key']); $value = ucwords($aggregation['full']['buckets'][0]['key']); $results[$key] = $value; } } catch (\Exception $e) { } return $results; }
/** * @param Terms $termsAgg * @throws ErrorException */ private function addAggregation(Terms $termsAgg) { foreach ($this->aggregation as $parameter => $queryAttr) { $aggregationModel = new Aggregation(); $aggregationModel->parameter = $parameter; $aggregationModel->attributes = $queryAttr; $itemAgg = $aggregationModel->getElasticaAggregations(); $itemAgg->setField($parameter); $termsAgg->addAggregation($itemAgg); $this->aggregationList[] = ['type' => $aggregationModel->type, 'index' => $aggregationModel->getAggregationName(), 'title' => (string) $aggregationModel]; } }
protected function getOuterAggregationResult($innerAggr) { $outerAggr = new Terms('top_tags'); $outerAggr->setField('tags'); $outerAggr->setMinimumDocumentCount(2); $outerAggr->addAggregation($innerAggr); $query = new Query(new MatchAll()); $query->addAggregation($outerAggr); return $this->_getIndexForTest()->search($query)->getAggregation('top_tags'); }