Как агрегировать поля с нулевыми данными и отсутствующими полями вasticsearch? - PullRequest
1 голос
/ 28 октября 2019

У меня есть эластичная база данных поиска:

   {
       "market": "NEW YORK",
       "hour_time_stamp": "2019-08-24 01:00:00",
       "model_year": 2014,
       "num_devices": 28   
   },
   {
       "market": "COLUMBIA",
       "hour_time_stamp": "2019-08-12 01:00:00",
       "model_year": 2019,
       "num_devices": 2    
   },
   {
       "market": null,
       "hour_time_stamp": "2019-08-11 01:00:00",
       "model_year": 2016,
       "num_devices": 1  
   },
   {
       "hour_time_stamp": "2019-08-02 01:00:00",
       "model_year": 2014,
       "num_devices": 750
   },
   {
       "market": "COLUMBIA",
       "hour_time_stamp": "2019-07-12 01:00:00",
       "model_year": 2018,
       "num_devices": 21
   }

Как видите, некоторые значения рынка равны нулю, а в некоторых случаях поле рынка отсутствует. Я написал следующий запросastic.js, чтобы получить рынок и выполнить агрегацию на нем:

let queryBody = ejs.Request()
      .size(0)
      .query(
        ejs.BoolQuery()
          .must(
            ejs.RangeQuery('hour_time_stamp').gte(this.lastDeviceDate).lte(this.lastDeviceDate)
          )
      )
      .agg(ejs.TermsAggregation('market_agg').field('market').order('sum', 'desc').size(50000)
      .agg(ejs.SumAggregation('sum').field('num_devices'))        
      );

Мне нужны данные о названии рынка и сумме num_devices для этого рынка (поскольку рынок можно повторять),Написанный мною запрос возвращает только тот рынок, где определена рыночная стоимость. Мне нужно включить отсутствующий рынок, а также «рынок»: ноль в моем ведре. Есть идеи, как мне это сделать?

...