首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Elasticsearch和聚合子查询

Elasticsearch和聚合子查询
EN

Stack Overflow用户
提问于 2014-09-12 20:16:04
回答 1查看 1.5K关注 0票数 4

我知道elasticsearch允许sub-aggregations (即嵌套聚合),但是我想将聚合应用于“第一次”聚合的结果(或通用的任何查询聚合或非聚合)。

具体示例:我记录有关用户操作的事件(为简单起见,我使用user_idaction编写文档)。我可以执行一个查询,计算每个用户执行的操作数量。然而,我想找出“活跃用户”的百分比(或计数)(例如,执行了10个以上操作的用户)。理想的结果应该是所有用户的histogram,显示用户的活跃程度。

有没有办法创建这样的查询?或者,除了存储子查询的聚合结果并计算出直方图之外,我还可以采取其他方法吗?

注意:我已经看到了Elastic Search and "sub queries"问题,但它是关于其他的东西,它已经有一年半的历史了,elasticsearch正在积极地开发中。

此外,似乎在1.4版中将有可用的脚本化指标聚合,但无论如何,这将要求在reduce阶段之前为每个用户存储计数器。一些“近似的解决方案”对我来说很好--类似于ES使用的internally for its aggregations

EN

回答 1

Stack Overflow用户

发布于 2015-01-09 06:04:57

下面是我使用的查询,注意聚合中的"min_doc_count“。

代码语言:javascript
运行
复制
{
  "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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25808152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档