带有两个时间戳字段的elasticsearch聚合

798qvoo8  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(212)

我对elasticsearch很陌生。我的会话索引如下所示

[
  {
    "id": "101",
    "start_date_time": "2020-09-11T14:00:00Z",
    "end_date_time": "2020-09-11T16:30:00Z",
     ...
  },
  {
    "id": "102",
    "start_date_time": "2020-09-11T18:30:00Z",
    "end_date_time": "2020-09-11T20:30:00Z",
     ...
  }
]

我想做的是获得session\u count和hours\u in\u use aggregation bucket的小时数。所以对于上面的数据,bucket应该是这样的。

{
  "buckets": [
    {
      "key_as_string": "2020-09-11T14:00:00.000Z",
      "session_count": {
        "value": 1
      },
      "hours_in_use": {
        "value": 1
      }
    },
    {
      "key_as_string": "2020-09-11T15:00:00.000Z",
      "session_count": {
        "value": 1
      },
      "hours_in_use": {
        "value": 1
      }
    },
    {
      "key_as_string": "2020-09-11T16:00:00.000Z",
      "session_count": {
        "value": 1
      },
      "hours_in_use": {
        "value": 0.5
      }
    },
    {
      "key_as_string": "2020-09-11T18:00:00.000Z",
      "session_count": {
        "value": 1
      },
      "hours_in_use": {
        "value": 0.5
      }
    },
    {
      "key_as_string": "2020-09-11T19:00:00.000Z",
      "session_count": {
        "value": 1
      },
      "hours_in_use": {
        "value": 1
      }
    },
    {
      "key_as_string": "2020-09-11T20:00:00.000Z",
      "session_count": {
        "value": 1
      },
      "hours_in_use": {
        "value": 0.5
      }
    }
  ]
}

我尝试使用bucket聚合,但找不到如何在从开始时间到结束时间的所有小时bucket中包含会话。我可以使用字典(map)在typescript代码中编写相同的逻辑,但是我想知道是否可以使用elasticsearch聚合来完成。我的要求不仅限于每小时一次,也可以是一天/月/周/年一次,我需要处理结束时间与时间重叠的情况,如我的示例所示。
我真的很感激你的指导。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题