仅在弹性搜索中其他键具有所需值的情况下,添加所有对象的一个​​键的值

时间:2019-06-27 12:03:10

标签: php elasticsearch

我在每个对象的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}}和3gweather

使用我尝试过的(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_typeweather的audio_calls。

0 个答案:

没有答案