【问题标题】:Calculating median response times of messages计算消息的中值响应时间
【发布时间】:2020-09-18 20:36:18
【问题描述】:

示例文档:

{
   "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 的旧对话/消息。

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

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation


    【解决方案1】:

    可能有一种方法可以使用我不知道的管道 aggs 来实现这一点,但由于文档的上下文并不“了解”彼此,因此您可能需要为此使用脚本化指标。

    伪代码如下所示:

    1. init: 初始化一个空的月份哈希映射 - vs - 按 id 分组的消息的哈希映射
    2. ma​​p:遍历所有查询的文档并将它们分配给正确的地图叶子
    3. 结合:计算中位数和其他指标
    4. reduce:以您选择的格式返回指标

    这是concrete, similar example。忽略nested 方面——原则仍然有效。

    【讨论】:

    • 确实很有帮助。让我试试看。考虑到 100 万份文档,您知道生产级机器大约需要多长时间吗?
    • 运气好@SahilGupta?
    • 我会试试这个。忙于某事。
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 2022-01-06
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多