如何计算Elasticsearch中的重叠/经过时间范围?

Xin*_*Xin 5 elasticsearch

我在ES中有一些记录,它们是人们在不同时间加入/离开的不同的在线会议记录。

{name:"p1", join:'2017-11-17T00:01:00.293Z', leave: "2017-11-17T00:06:00.293Z"}
{name:"p2", join:'2017-11-17T00:02:00.293Z', leave: "2017-11-17T00:04:00.293Z"}
{name:"p3", join:'2017-11-17T00:03:00.293Z', leave: "2017-11-17T00:05:00.293Z"}
Run Code Online (Sandbox Code Playgroud)

时间范围可能是这样的:

 p1: [============================================]
 p2:         [=================]
 p3:                  [==================]
Run Code Online (Sandbox Code Playgroud)

问题是如何计算重叠时间范围(公共/会议/共享时间),应为3分钟

另一个问题是,是否可以知道何时何时有1/2/3人?2分钟2人;1分3人

Vol*_*hat 2

我认为仅使用 ES 是不可能的。很简单,因为您所需要的只是在搜索中应该转到所有匹配的文档并根据该文档进行计算

我将按照以下步骤进行操作。

1.在索引新文档之前搜索重叠的文档。

GET /meetings/_search

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "join": {
              "gte": "2007-10-01T00:00:00"
            }
          }
        },
        {
          "range": {
            "leave": {
              "lte": "2007-10-01T00:00:00"
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 计算后端所有重叠文档的所有功能。
  2. 保存到文档,因为嵌套对象与您需要的元数据重叠