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);