FilterAggregation не работает, как ожидалось

Я пытаюсь объединить фильтры для 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 ответ

Решение

Это ожидаемое поведение Filters-Aggergation согласно документации

Определяет агрегации с несколькими сегментами, где каждый сегмент связан с фильтром. Каждое ведро будет собирать все документы, которые соответствуют связанному фильтру.

Если бы вы хотели AND из двух фильтров вы можете использовать агрегатный фильтр вместе с bool-запросом

Пример:

$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);
Другие вопросы по тегам