FOSElasticaBundle icon indicating copy to clipboard operation
FOSElasticaBundle copied to clipboard

Fetch aggregated data after passing aggregated data request

Open Mohammadtrabelsi opened this issue 3 years ago • 0 comments

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 ?

Mohammadtrabelsi avatar Feb 01 '22 16:02 Mohammadtrabelsi