根据term字段过滤elasticsearch bucket聚合
Filter elasticsearch bucket aggregation based on term field
我有一个产品列表(deal
实体),我正在尝试按类别创建桶聚合,按 available_stock
的总和排序。
一切正常,但我想从生成的聚合中排除未将 level
设置为 1 的此类类别(换句话说,我只想将聚合保留在 level
是 1).
我知道 elasticsearch 提供 "exclude" 和 "include" 参数,但这些参数仅适用于我正在聚合的同一字段(在本例中为 deal.category.id
)
这是我的示例 deal
文档:
{
"_source": {
"id": 392745,
"category": [
{
"id": 17575,
"level": 2
},
{
"id": 17574,
"level": 1
},
{
"id": 17572,
"level": 0
}
],
"stats": {
"available_stock": 500
}
}
}
这将是查询:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
}
},
"aggs": {
"mainAggregation": {
"terms": {
"field": "deal.category.id",
"order": {
"available_stock": "desc"
},
"size": 3
},
"aggs": {
"available_stock": {
"sum": {
"field": "deal.stats.available_stock"
}
}
}
}
},
"size": 0
}
以及我生成的聚合,遗憾的是包括级别为 0 的类别 17572
。
{
"aggregations": {
"mainAggregation": {
"buckets": [
{
"key": 17572,
"doc_count": 30,
"available_stock": {
"value": 24000
}
},
{
"key": 17598,
"doc_count": 10,
"available_stock": {
"value": 12000
}
},
{
"key": 17602,
"doc_count": 8,
"available_stock": {
"value": 6000
}
}
]
}
}
}
P.S.: 目前使用 ElasticSearch 1.6
更新 1:在对子聚合进行各种组合的各种实验后,问题仍然存在。
我发现这个问题无法解决,因此决定进行两个单独的查询。
我有一个产品列表(deal
实体),我正在尝试按类别创建桶聚合,按 available_stock
的总和排序。
一切正常,但我想从生成的聚合中排除未将 level
设置为 1 的此类类别(换句话说,我只想将聚合保留在 level
是 1).
我知道 elasticsearch 提供 "exclude" 和 "include" 参数,但这些参数仅适用于我正在聚合的同一字段(在本例中为 deal.category.id
)
这是我的示例 deal
文档:
{
"_source": {
"id": 392745,
"category": [
{
"id": 17575,
"level": 2
},
{
"id": 17574,
"level": 1
},
{
"id": 17572,
"level": 0
}
],
"stats": {
"available_stock": 500
}
}
}
这将是查询:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
}
},
"aggs": {
"mainAggregation": {
"terms": {
"field": "deal.category.id",
"order": {
"available_stock": "desc"
},
"size": 3
},
"aggs": {
"available_stock": {
"sum": {
"field": "deal.stats.available_stock"
}
}
}
}
},
"size": 0
}
以及我生成的聚合,遗憾的是包括级别为 0 的类别 17572
。
{
"aggregations": {
"mainAggregation": {
"buckets": [
{
"key": 17572,
"doc_count": 30,
"available_stock": {
"value": 24000
}
},
{
"key": 17598,
"doc_count": 10,
"available_stock": {
"value": 12000
}
},
{
"key": 17602,
"doc_count": 8,
"available_stock": {
"value": 6000
}
}
]
}
}
}
P.S.: 目前使用 ElasticSearch 1.6
更新 1:在对子聚合进行各种组合的各种实验后,问题仍然存在。
我发现这个问题无法解决,因此决定进行两个单独的查询。