首页 > 解决方案 > 如何在elasticsearch中聚合具有空数据和缺失字段的字段?

问题描述

我有弹性搜索数据库如下:

   {
       "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
   }

如您所见,市场的某些值是空的,在某些情况下市场字段丢失。我编写了以下 elastic.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 的总和(因为可以重复市场)。我写的查询只返回定义市场价值的市场。我需要在我的桶中包括缺失的市场以及“市场”:null。任何想法我该怎么做?

标签: javascriptnode.jselasticsearchkibanaelastic-stack

解决方案


推荐阅读