我知道elasticsearch允许sub-aggregations (即嵌套聚合),但是我想将聚合应用于“第一次”聚合的结果(或通用的任何查询聚合或非聚合)。
具体示例:我记录有关用户操作的事件(为简单起见,我使用user_id和action编写文档)。我可以执行一个查询,计算每个用户执行的操作数量。然而,我想找出“活跃用户”的百分比(或计数)(例如,执行了10个以上操作的用户)。理想的结果应该是所有用户的histogram,显示用户的活跃程度。
有没有办法创建这样的查询?或者,除了存储子查询的聚合结果并计算出直方图之外,我还可以采取其他方法吗?
注意:我已经看到了Elastic Search and "sub queries"问题,但它是关于其他的东西,它已经有一年半的历史了,elasticsearch正在积极地开发中。
此外,似乎在1.4版中将有可用的脚本化指标聚合,但无论如何,这将要求在reduce阶段之前为每个用户存储计数器。一些“近似的解决方案”对我来说很好--类似于ES使用的internally for its aggregations。
发布于 2015-01-09 06:04:57
下面是我使用的查询,注意聚合中的"min_doc_count“。
{
"query": {
"filtered": {
"filter": {
"and": [
{ "term" : { "name": "did x" } },
{ "range": { "created_at": { "gte": "now-7d", "lte": "now" } } }
]
}
}
},
"aggregations": {
"my_agg": {
"terms": {
"field": "user_id",
"min_doc_count": 10,
"size": 0
}
}
}
}该查询返回指定时间段内事件数超过9的存储桶(用户)列表。只需“计数”结果即可获得活跃用户数。
我已经用数千个事件测试了这种方法,它工作得很好。在一定的规模下,您将不得不使用Hadoop。
https://stackoverflow.com/questions/25808152
复制相似问题