FOSElasticaBundle
FOSElasticaBundle copied to clipboard
Fetch aggregated data after passing aggregated data request
I prepared a query
$query = new Query\BoolQuery();
and after that i created a new aggregation and i added this to the query object with this code:
$statsAgg = new Stats("height_stats");
$statsAgg->setField($aggregation['field']);
$agg = new \Elastica\Aggregation\Nested($aggregation['name'], $aggregation['name']);
$elasticaAggreg = new \Elastica\Aggregation\Terms($aggregation['field']);
$cardinality = new \Elastica\Aggregation\Cardinality($aggregation['description']);
$cardinality->setField($aggregation['field']);
$elasticaAggreg->setField($aggregation['field']);
$elasticaAggreg->addAggregation($cardinality);
$elasticaAggreg->setSize($aggregation['limit']);
$elasticaAggreg->setOrder('_term', 'desc');
$elasticaAggreg->addAggregation($statsAgg);
$agg->addAggregation($elasticaAggreg);
$agg->addAggregation($elasticaAggreg);
// ---> adding aggregation to query object
$this->query->addAggregation($agg);
I execute the request to elasticsearch server like this:
$search->addIndex('supplier_product_price');
$result = $search->search($this->query, ['limit' => $searchArray['limit'], 'from' => $searchArray['offset']]);
Finally I want to get data from aggregation
array:1 [▼
"product" => array:2 [▼
"doc_count" => 648
"product.id" => array:3 [▼
"doc_count_error_upper_bound" => 0
"sum_other_doc_count" => 0
"buckets" => array:376 [▼
0 => array:4 [▼
"key" => 34564
"doc_count" => 1
"height_stats" => array:5 [▶]
"unique_products" => array:1 [▶]
]
]
]
but i can't get the full data of the aggregated result $result->getAggregations()
$resultsRaw = $result->getResults();
$resultsRawAgg = $result->getAggregations()[$agg['name']][$agg['field']]['buckets'];
The only solution is to iterate on $result->getResults() and do the matching! Any solution ?