【发布时间】:2017-01-25 17:54:12
【问题描述】:
我正在寻找一种如何使用弹性搜索计算网页跳出率的方法。
我们以以下简化结构收集数据
{"id":"1", "timestamp"="2017-01-25:15:23", "sessionid"="s1", "page"="index"}
{"id":"2", "timestamp"="2017-01-25:15:24", "sessionid"="s1", "page"="checkout"}
{"id":"3", "timestamp"="2017-01-25:15:25", "sessionid"="s1", "page"="confirm"}
{"id":"4", "timestamp"="2017-01-25:15:26", "sessionid"="s2", "page"="index"}
{"id":"5", "timestamp"="2017-01-25:15:27", "sessionid"="s2", "page"="checkout"}
{"id":"6", "timestamp"="2017-01-25:15:26", "sessionid"="s3", "page"="product_a"}
{"id":"7", "timestamp"="2017-01-25:15:28", "sessionid"="s3", "page"="checkout"}
对于这个样本,分析结果应该是:
2/3 的用户在结帐页面迷路。
1/3的用户在确认页面迷路
更正式地说,我正在寻找一种通用方法,如何在弹性查询中实现以下算法:
- 按字段对文档进行分组
- 按第二个字段对每个组(存储桶)进行排序并减少到最顶部的文档
- 按第三个字段对所有这些剩余文档进行分组
- 按文档数量对组进行排序
我的第一次尝试是使用 terms 聚合 然后是 top_hits 聚合 来解决这个问题,最后使用 terms_pipeline 聚合 对页面进行分组。
(简化聚合结构)
aggs
terms
field: sessionid
aggs
top_hits
sort:timestamp desc
size: 1
terms_pipeline
bucket_path: terms>top_hits
field: page
...但不幸的是,没有像 terms_pipeline 聚合这样的东西。我的错。
对替代方法有什么想法吗?
【问题讨论】:
标签: elasticsearch