在 Elastica 中过滤全局聚合

Filtering global aggregation in Elastica

我使用 ruflin/Elastica 构建了弹性查询,并进行了全局聚合。是否可以以某种方式向其添加一些过滤器,与我的主要查询分开。

看起来是这样的:

    $query = new Query($boolQuery);

    $categoryAggregation = new Terms('category_ids');
    $categoryAggregation->setField('category_ids');
    $categoryAggregation->setSize(0);

    $manufacturerAggregation = new Terms('manufacturer_ids');
    $manufacturerAggregation->setField('manufacturer_id');
    $manufacturerAggregation->setSize(0);

    $globalAggregation = new GlobalAggregation('global');
    $globalAggregation->addAggregation($categoryAggregation);
    $globalAggregation->addAggregation($manufacturerAggregation);

    $query->addAggregation($globalAggregation);

我想向 manufacturer_idscategory_ids 聚合添加一些自定义过滤器。目前,它们是从所有文档中汇总而来的。有什么办法可以通过 Elastica API 来实现,以便对其应用一些过滤吗?

我自己摸索出来的,如下:

$categoryAggregation = new Terms('category_ids');
$categoryAggregation->setField('category_ids');
$categoryAggregation->setSize(0);

$filter = new Filter('category_ids', $merchantIdQuery);
$filter->addAggregation($categoryAggregation);

$globalAggregation = new GlobalAggregation('global');
$globalAggregation->addAggregation($filter);