Добавляйте значения одного ключа для всех объектов, только если другие ключи имеют требуемые значения вasticsearch - PullRequest
0 голосов
/ 27 июня 2019

У меня есть около 5 пар ключ-значение в данных эластичного поиска на объект, я хочу добавить значения определенных ключей (audio_calls) тех объектов, где некоторые другие ключи имеют нужные мне значения (network_type, weather). Я хочу, чтобы результат был сгруппирован по 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 равно 3g и weather sunny.

С помощью (PHP) кода, который я попробовал (Filtered Aggregation), агрегация просто добавила все вызовы во всех объектах без группировки по area_num.

 '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]
                              ]
                          ]                   
          ]

(где $ call_type = "audio_calls";)

"aggregations":{"filter_by_conditions":  
{"doc_count":1665,"sum_of_calls":{"value":31464}}}} 

Я хочу вывод, который был агрегирован на основе area_num и добавлены только audio_calls, которые удовлетворяют выбранным network_type и weather, для каждого area_num.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...