/**
  * {@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;
 }
Esempio n. 3
0
 /**
  * {@inheritdoc}
  */
 public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null)
 {
     $stateAgg = new StatsAggregation('date_range_agg');
     $stateAgg->setField($this->getField());
     $search->addAggregation($stateAgg);
 }