是否有办法(可能聚合聚合桶)在聚合中应用多个过滤器并让它返回单个度量值?
例如,这是一个汇总查询,其中我获得了option_id = 16和category.id = 870的所有产品的最低/最高价格。
{
"aggregations": {
"prices": {
"filters": {
"filters": {
"category": {
"terms": {
"category.id": [ 870 ]
}
},
"option": {
"terms": {
"option_id": [ 16 ]
}
}
}
},
"aggregations": {
"price_min": {
"min": {
"field": "variant.price_total"
}
},
"price_max": {
"max": {
"field": "variant.price_total"
}
}
}
}
}
}
不幸的是,这给了我两个不同的值:
{
"doc_count": 1450674,
"prices": {
"buckets": {
"category": {
"doc_count": 42979,
"price_min": {
"value": 0.49
},
"price_max": {
"value": 39998.99
}
},
"store": {
"doc_count": 100961,
"price_min": {
"value": 0.06
},
"price_max": {
"value": 644000
}
}
}
}
}
有没有办法将两个过滤器一起应用到一个指标/存储桶中?
答案 0 :(得分:5)
是的。您需要使用filter
聚合而不是filters
聚合。查询将如下所示:
{
"aggregations": {
"prices": {
"filter": {
"bool": {
"must": [
{
"terms": {
"category.id": [
870
]
}
},
{
"terms": {
"option_id": [
16
]
}
}
]
}
},
"aggregations": {
"price_min": {
"min": {
"field": "variant.price_total"
}
},
"price_max": {
"max": {
"field": "variant.price_total"
}
}
}
}
}
}
这将为price_min
提供单一指标,并为price_max
提供单一指标,同时应用这两种指标。