我无法应用链式聚合的概念...在这种情况下我需要帮助:
我的文档如下:
{
"date":"2019-01-30",
"value":1234.56,
"partnerId":9876
}
和我想通过日期(月)滤波器和由合作伙伴ID概括它们,然后计数它,从而获得像结果:
{
"partnerId": 9876,
"totalValue": 12345567.87,
"count": 6574
}
如何将这个查询什么样子?
答案 0 :(得分:3)
您要实现的目标可以通过子聚合来完成,换句话说,就是在聚合内部进行聚合。
对于您的情况,首先要按parternId
分组,因此您需要在parternId
字段上输入terms aggregation。让我们将此聚合称为partners
。这将为您提供预期结果的两个值parternId
和count
。
现在,对于partnerId
的每个组(存储桶),都需要totalValue
,即每个partnerId的总和为value
。这可以通过在术语聚合partners
中添加sum aggregation来完成。因此,最终查询以及日期(月份)过滤器将为:
{
"query": {
"bool": {
"filter": {
"range": {
"date": {
"gte": "2019-01-01",
"lte": "2019-01-31"
}
}
}
}
},
"aggs": {
"partner": {
"terms": {
"field": "partnerId"
},
"aggs": {
"totalValue": {
"sum": {
"field": "value"
}
}
}
}
}
}
"aggregations": {
"partner": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 9876,
"doc_count": 3,
"totalValue": {
"value": 3704.68017578125
}
},
{
"key": 9878,
"doc_count": 2,
"totalValue": {
"value": 2454.1201171875
}
}
]
}
在key
以上的结果是partnerId
,doc_count
是count
,而totalValue.value
是您的预期结果的totalValue
。