让我们说一个Elasticsearch文档可能看起来像这样:
{
"created": "2018-11-26T22:20:01+00:00",
"user_id": 2,
"text": "Test!"
"verb": "comment_posted",
"thread_id": 1
}
我想按动词过滤为仅“ comment_posted”,然后获取每个用户对特定帖子(创建的字段)的评论之间的平均时间。
这是示例数据集和预期结果:
用户'A'于1:30在线程'1'上发布(启动线程)
用户'B'于1:45在线程'2'上发布(启动线程)
用户'A'在2:00在线程'2'上发布
用户“ B”于3:30在线程“ 1”上发布
用户'B'在4:30在线程'1'上发布
用户'A'在5:15在线程'1'上发布
用户“ A”平均需要30分钟(2:00-1:45和5:15-4:30),用户“ B”平均需要120分钟(3:30-1 :30和4:30-3:30)。
查询内容如何?
答案 0 :(得分:0)
简短答案
这样做可能是可能,但不是推荐。
好答案
通常,要做类似的事情,您需要使用aggregation。
唯一允许计算增量的聚合是Serial Differencing Aggregation。但是,它应在直方图或日期直方图聚合的上下文中使用。
在您的情况下,要在每个直方图存储桶中获得单个注释,您可以创建一个很小的存储桶(例如,细分为一秒)的直方图,然后使用序列差分获取时间增量。 但是,如ElasticSearch论坛上的this answer所述,这在性能上会很糟糕。
所以这里的答案是,您需要在索引时计算这些增量,或者如果有的话,则使用其他商店的数据(例如,在Postgres中非常容易计算)。