【问题标题】:Groupby query in elastic searchelasticsearch中的Group By查询
【发布时间】:2018-05-23 10:07:26
【问题描述】:

我有一个弹性搜索集群,其中包含我网站的分析数据。用户访问页面时会发生页面查看事件。每个页面浏览事件都会有一个 session-id 字段,该字段在用户会话期间保持不变。

我想通过按会话 id 对事件进行分组并计算第一个事件和最后一个事件之间的持续时间差异来计算每个会话的会话持续时间

我有什么方法可以通过 Elastic Search Query 实现这一目标?

浏览量事件

  [
    { 
      "session-id":"234234-234234-324324-23432432",
      "url": 'testpage1',
      "timestamp":54323424222
    },
    { 
      "session-id":"234234-234234-324324-23432432",
      "url": 'testpage2',
      "timestamp":54323424223
    },
    { 
      "session-id":"234234-234234-324324-23432432",
      "url": 'testpage3',
      "timestamp":54323424224
    }
]

会话持续时间为 (54323424224 - 54323424222)ms

编辑:

我能够通过查询min(timestamp)max(timestamp) 为每个会话ID 创建一个带有会话ID、最大时间戳、最小时间戳的数据表可视化。现在我需要的只是这些与 aggs 之间的不同。

【问题讨论】:

  • 如果你想分组,你需要使用聚合。

标签: elasticsearch group-by


【解决方案1】:

没有办法计算桶内的最大值和最小值之间的差异。

尝试在您的客户端计算与 min-max 的差异:

{
  "aggs": {
    "bySession": {
      "terms": {
        "field": "session-id.keyword"
      },
      "aggs": {
        "statsBySession": {
          "stats": {
            "field": "timestamp"
          }
        }
      }
    }
  }
}

【讨论】:

    【解决方案2】:

    统计桶聚合将为您提供有关每个会话的 minmax 时间戳的信息。您可以使用 bucket 脚本聚合计算它们之间的差异(max - min)

    参考:bucket-script-aggregationstats-bucket-aggregation

    您可以使用以下查询来计算每个会话 ID 的 maxmin 时间戳之间的差异:

    {
      "size": 0,
      "aggs": {
        "session": {
          "terms": {
            "field": "session-id.keyword",
            "size": 10
          },
          "aggs": {
            "stats_bucket":{
              "stats":{
                "field": "timestamp"  
              }
            },
            "time_spent": {
              "bucket_script": {
                "buckets_path": {
                  "min_stats": "stats_bucket.min",
                  "max_stats": "stats_bucket.max"
                },
                "script": "params.max_stats - params.min_stats"
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2019-01-21
      • 2012-12-31
      • 2015-02-16
      相关资源
      最近更新 更多