/** * {@inheritdoc} */ public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null) { $name = $state ? $state->getName() : $this->getField(); $aggregation = new TermsAggregation($name); $aggregation->setField($this->getField()); if ($this->getSortType()) { $aggregation->addParameter('order', [$this->getSortType()['type'] => $this->getSortType()['order']]); } $aggregation->addParameter('size', 0); if ($this->getSize() > 0) { $aggregation->addParameter('size', $this->getSize()); } if ($relatedSearch->getPostFilters()) { $filterAggregation = new FilterAggregation($name . '-filter'); $filterAggregation->setFilter($relatedSearch->getPostFilters()); $filterAggregation->addAggregation($aggregation); $search->addAggregation($filterAggregation); } else { $search->addAggregation($aggregation); } }
/** * @return Search */ public function getTestSubAggregationsData() { $out = []; // Case 0: top hits aggregation inside ranges. $search = new Search(); $rangeAgg = new RangeAggregation('range'); $rangeAgg->setField('price'); $rangeAgg->addRange(null, 15); $rangeAgg->addRange(15); $topHitsAgg = new TopHitsAggregation('top_hits'); $topHitsAgg->setSort(new Sorts(new Sort('price', Sort::ORDER_DESC))); $rangeAgg->addAggregation($topHitsAgg); $search->addAggregation($rangeAgg); $expectedTopHits = [[1], [2, 3]]; $out[] = [$search, $expectedTopHits]; return $out; }
/** * {@inheritdoc} */ public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null) { $stateAgg = new StatsAggregation('date_range_agg'); $stateAgg->setField($this->getField()); $search->addAggregation($stateAgg); }