计算消息的平均响应时间

时间:2020-09-18 10:31:36

标签: elasticsearch elasticsearch-aggregation

示例文档:

{
   "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. 对消息的响应未嵌套在消息下方。他们也不共享父母/孩子的关系。

  2. 每个发送的消息都应被视为最后收到的消息的答复。 (我知道它可能看起来很奇怪,但确实如此)

询问:计算每月邮件的平均响应时间。

问题:中位数计算可能不是问题,但我不确定如何考虑文档的统一层次结构来计算响应时间。

我的尝试:

  1. 对于每条新发送的消息,将响应时间标记为对话中最后收到的消息。
  2. 处理#1的旧会话/消息。

有更好的方法吗?可以使用管道聚合吗?

1 个答案:

答案 0 :(得分:1)

也许有一种我不知道的使用管道aggs来实现此目的的方法,但是由于文档的上下文彼此之间并不“意识到”,因此您可能需要为此使用脚本化度量。

伪代码如下:

  1. 初始化:初始化一个空的每月哈希映射-vs-按ID分组的邮件哈希映射
  2. 地图:遍历所有查询的文档并将其分配给正确的地图叶子
  3. 组合::计算中位数和其他指标
  4. 减少:以您选择的格式返回指标

这里是concrete, similar example。忽略nested方面-原理仍然存在。

相关问题