计算消息的平均响应时间

tv6aics1  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(416)

示例文档:

{
   "id":123,
   "message_type":"RECEIVE",
   "conversation_id":"1"
   "date":"2020-01-01T12:00:00"
},
{
   "id":456,
   "message_type":"SEND",
   "conversation_id":"1"
   "date":"2020-01-01T13:00:00"
},
{
   "id":789,
   "message_type":"SEND",
   "conversation_id":"1"
   "date":"2020-01-01T14:00:00"
}

上下文:
对消息的响应不嵌套在消息下。他们也不共享父/子关系。
每一条发送的信息都被认为是最后一条收到的信息的回复(我知道这看起来很奇怪,但事实确实如此)
问:计算每月消息的平均响应时间。
问题:中位数计算可能不是问题,但考虑到文档的扁平层次结构,我不确定如何计算响应时间。
我的尝试:
对于每个新发送的消息,用会话中最后接收的消息标记响应时间。
处理#1的旧对话/消息。
有更好的方法吗?管道聚合可以用于此吗?

wlp8pajw

wlp8pajw1#

可能有一种方法可以使用我不知道的管道agg来实现这一点,但是由于文档的上下文彼此不“知道”,因此您可能需要为此使用脚本度量。
伪代码如下所示:
init:初始化按id分组的消息的month-vs-hashMap的空哈希Map
Map:遍历所有查询的文档并将它们分配给正确的Map
合并:计算中位数和其他指标
reduce:以您选择的格式返回度量
这是一个具体的,类似的例子。无视 nested 方面——原则仍然有效。

相关问题