FilterAggregation无法正常工作

时间:2016-03-03 12:43:17

标签: php elasticsearch elastica

我正在尝试将过滤器组合成FilterAggregation。这里的例子是:

$agg = new Elastica\Aggregation\Filters('size');

$filter1 = new Elastica\Query\Terms();       
$filter1->setTerms('color', $color);

$filter2 = new Elastica\Query\Terms();
$filter2->setTerms('material', $material);

$agg->addFilter($filter1);
$agg->addFilter($filter2);

问题在这里,ElasticSearch没有组合过滤器,给我一个包含2个元素的数组,其中每个过滤器都是聚合的,但不是两个过滤器与AND的聚合。

如何在过滤器之间建立AND?

由于

的Nik

1 个答案:

答案 0 :(得分:1)

根据documentation

,这是Filters-Aggergation a的预期行为
  

定义每个存储桶关联的多存储桶聚合   用过滤器。每个桶都将收集与其匹配的所有文档   相关过滤器。

如果您想要AND两个过滤器,可以使用aggregation-filter以及bool-query

示例:

$agg = new Elastica\Aggregation\Filter('size');

$filter1 = new Elastica\Query\Terms();       
$filter1->setTerms('color', $color);  
$filter2 = new Elastica\Query\Terms();    
$filter2->setTerms('material',$material);

$boolQuery = new Elastica\Query\BoolQuery();
$boolQuery->addFilter($filter1);  
$boolQuery->addFilter($filter2);

$agg->setFilter($boolQuery);