我在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"}
时间范围可能是这样的:
p1: [============================================]
p2: [=================]
p3: [==================]
问题是如何计算重叠时间范围(共同/会议/共享时间),应该 3分钟
另一个问题是,是否有可能知道何时何时有1/2/3人? 2分钟2人; 1分钟3人
答案 0 :(得分: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"
}
}
}
]
}
}
}
答案 1 :(得分:1)
您可以使用<Route>
和max(join)
轻松完成第一部分:
min(leave)
然后,您可以在处理Elasticsearch响应或使用bucket script aggregation时计算endTime-startTime。它可能是负数,在这种情况下没有重叠。
对于第二个,它取决于你想要的: 如果您想要可能难以阅读的确切边界,可以使用Scripted Metric Aggregation来完成。
如果您想拥有每个广告位的数量(例如小时),则可能更容易使用Date Histogram Aggregation。