我在每个对象的Elasticsearch数据中有大约5个键值对,我想在那些其他键具有我想要的值(network_type,weather)的情况下,添加那些对象的某些键(audio_calls)的值。我希望将结果按area_num
分组。
例如
{
.
.
"audio_calls":2000,
"area": "a",
"area_num": 1,
"network_type":"3g",
"weather":"sunny"
.
.
}
{
.
.
"audio_calls":1420,
"area": "a",
"area_num": 1,
"network_type":"4g",
"weather":"stormy"
.
.
}
{
.
.
"audio_calls": 1503,
"area": "c",
"area_num": 2,
"network_type":"4g"
"weather":"cold"
}
{
.
.
"audio_calls": 4051,
"area": "c",
"area_num": 2,
"network_type":"4g"
"weather":"sunny"
}
{
.
.
"audio_calls": 240,
"area": "e",
"area_num": 3,
"network_type":"2g",
"weather":"cloudy"
.
.
.
}
.
.
.
我猜想我必须使用聚合来执行此操作,但是,我不知道如何有条件地添加audio_calls
值,例如仅添加audio_calls
,其中network_type
是{{ 1}}和3g
是weather
。
使用我尝试过的(PHP)代码(“过滤的聚合”),聚合仅将所有调用添加到所有对象中,而不按area_num分组。
sunny
(其中$ call_type =“ audio_calls”;)
'aggs' => [
'filter_by_conditions' => [
'filter' => [
'terms' => ['network_type' => $network_type],
'terms' => ['weather' => $weather],
],
'aggs' => [
'sum_of_calls' => [
'sum' => ['field' => $call_type]
],
'aggs' => [
'terms' => ['field' => $area_num, 'size' => 1000]
]
]
]
我想要一个基于"aggregations":{"filter_by_conditions":
{"doc_count":1665,"sum_of_calls":{"value":31464}}}}
进行汇总的输出,并且只为每个area_num
添加满足选择的network_type
和weather
的audio_calls。