Elastica\Aggregation\Filters::addFilter PHP Метод

addFilter() публичный Метод

If a name is given, it will be added as a key, otherwise considered as an anonymous filter
public addFilter ( Elastica\Query\AbstractQuery $filter, string $name = null )
$filter Elastica\Query\AbstractQuery
$name string
    public function addFilter(AbstractQuery $filter, $name = null)
    {
        if (null !== $name && !is_string($name)) {
            throw new InvalidException('Name must be a string');
        }
        $filterArray = [];
        $type = self::NAMED_TYPE;
        if (null === $name) {
            $filterArray[] = $filter;
            $type = self::ANONYMOUS_TYPE;
        } else {
            $filterArray[$name] = $filter;
        }
        if ($this->hasParam('filters') && count($this->getParam('filters')) && $this->_type !== $type) {
            throw new InvalidException('Mix named and anonymous keys are not allowed');
        }
        $this->_type = $type;
        return $this->addParam('filters', $filterArray);
    }

Usage Example

Пример #1
0
 /**
  * @group functional
  */
 public function testFilterAggregation()
 {
     $agg = new Filters('by_color');
     $agg->addFilter(new Term(array('color' => 'blue')), 'blue');
     $agg->addFilter(new Term(array('color' => 'red')), 'red');
     $avg = new Avg('avg_price');
     $avg->setField('price');
     $agg->addAggregation($avg);
     $query = new Query();
     $query->addAggregation($agg);
     $results = $this->_getIndexForTest()->search($query)->getAggregation('by_color');
     $resultsForBlue = $results['buckets']['blue'];
     $resultsForRed = $results['buckets']['red'];
     $this->assertEquals(2, $resultsForBlue['doc_count']);
     $this->assertEquals(1, $resultsForRed['doc_count']);
     $this->assertEquals((5 + 8) / 2, $resultsForBlue['avg_price']['value']);
     $this->assertEquals(1, $resultsForRed['avg_price']['value']);
 }