/** * {@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); } }
/** * Test filters in aggregations and post filter. */ public function testBoolWithFuzzyQueryAndSortFilter() { $repo = $this->getManager()->getRepository('AcmeTestBundle:Product'); $search = $repo->createSearch(); $rangeFilter = new RangeFilter('price', ['from' => 200, 'to' => 999]); $search->addPostFilter($rangeFilter); $name = 'foo'; $TermsAgg = new TermsAggregation($name); $TermsAgg->setField('title'); $TermsAgg->addParameter('include', $name); $filterAgg = new FilterAggregation($name . '-filter'); $filters = $search->getPostFilters(); $filterAgg->setFilter($filters); $filterAgg->addAggregation($TermsAgg); $search->addAggregation($filterAgg); $repo->execute($search, Repository::RESULTS_RAW); }
/** * Tests setOrder DESC method. */ public function testTermsAggregationSetOrderDESC() { // Case #7 terms aggregation with order term mode, desc direction. $aggregation = new TermsAggregation('test_agg'); $aggregation->setField('test_field'); $aggregation->addParameter('order', ['_term' => 'desc']); $result = ['agg_test_agg' => ['terms' => ['field' => 'test_field', 'order' => ['_term' => 'desc']]]]; $this->assertEquals($aggregation->toArray(), $result); }
/** * Builds term aggregation. * * @param array $options * * @return TermsAggregation */ private function getAggregation($options) { $term = new TermsAggregation($options['name']); $term->setField($options['field']); if (array_key_exists('exclude', $options)) { $term->addParameter('exclude', $options['exclude']); } if (array_key_exists('include', $options)) { $term->addParameter('include', $options['include']); } if (array_key_exists('min_document_count', $options)) { $term->addParameter('min_doc_count', $options['min_document_count']); } if (array_key_exists('order', $options)) { $term->addParameter('order', [$options['order'][0] => $options['order'][1]]); } if (array_key_exists('size', $options)) { $term->addParameter('size', $options['size']); } return $term; }