当前位置: 首页 > 知识库问答 >
问题:

子查询的弹性搜索和聚合

张鹏云
2023-03-14

我知道elasticsearch允许子聚合(即嵌套聚合),但是我想对“第一次”聚合的结果应用聚合(或者在通用的任何查询中-聚合与否)。

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

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

注意:我见过弹性搜索和“子查询”问题,但它是关于其他东西的,已经超过一年半了,弹性搜索正在积极开发中。

此外,在1.4版中似乎会有可用的脚本度量聚合,但无论如何,这需要为每个用户存储计数器,直到减少阶段。一些“近似解决方案”对我有好处——类似于ES在内部用于聚合的方法。

共有1个答案

景德海
2023-03-14

这是我使用的查询,请注意聚合中的“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。

 类似资料:
  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢

  • 我正在LDAP服务器上工作。它有弹性搜索。我必须用一些Javascript代码(JSON格式)发送查询。 这是我的查询: 我试图打印所有结果,其中“server”=“server\u name”(该字段是server:server\u name…)。我认为关于弹性搜索的文档太小了。我找到了一些文档,但都是一样的,对新用户没有帮助。这个例子太简单了。 此查询返回所有结果,包括任何筛选器。 Ps:这就

  • 我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?

  • 实现此功能的推荐方法是什么?注意,我使用的是查询字符串查询。

  • 我在术语查询中要求弹性搜索中的嵌套字段,其中嵌套字段值应与术语查询中提供的值的数量完全匹配。例如,考虑下面的查询,在这里我们对名为类型的嵌套字段进行查询。 GET资产/_search 索引映射 样本文件: 上述查询应返回字段类型正好有2个值的文档,即“VOD”

  • 如何获得空数组和美国的结果和