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

elasticsearch java api获取术语聚合的平均值

苏野
2023-03-14

我正在使用带有java api的elasticsearch,我正在尝试从每个词聚合桶中获取最低记录的平均值。我发现的一个解决方案是获得这样的结果

AggregationBuilders.terms("group_by_flights").field("flight_id)
    .subAggregation(AggregationBuilders.min("minimum").field("duration")))

然后在代码端计算平均值。问题是,如果有很多结果,它将分配大量内存来计数。我想在弹性方面这样做。我发现,有一种类似于avg bucket pipeline聚合的东西,可以作为兄弟聚合添加到术语(和其他术语)中

"the average": {
  "avg_bucket": {
    "buckets_path": "some_bucket_path" 
  }
}

问题是在java api中,您只能将管道聚合添加为子聚合。因此,如果我们像这样构建聚合,我们的术语聚合将不会被看到

AggregationBuilders.terms("group_by_flights").field("flight_id")
    .subAggregation(PipelineAggregatorBuilders.avgBucket("avg", "group_by_flights.duration" *<- this wont't be seen because its subaggregation*))

我在考虑制作一些空的顶部聚合,然后将所有聚合作为子聚合添加,但这看起来像是愚蠢的走动,我没有正确理解某些事情。有什么想法吗?

共有2个答案

郭星文
2023-03-14

我的解决方案是使用FilterAggregationBuilder,这个可以过滤数据。第一个子聚合用于生成数据桶,第二个子聚合用于合并桶数据。

AggregationBuilders.filter("global_aggregation", bool)
    .subAggregation((AggregationBuilders.terms("group_by_flights").field("flight_id"))
    .subAggregation(AggregationBuilders.min("min").field("duration")))
    .subAggregation(PipelineAggregatorBuilders.avgBucket("avg_bucket_aggs", "group_by_flights>min"));
邵胜涝
2023-03-14

到目前为止,我找到的唯一解决方案是将聚合作为“空聚合”的子聚合

AggregationBuilders.global("global_aggregation")
    .subAggregation((AggregationBuilders.terms("group_by_flights").field("flight_id"))
        .subAggregation(AggregationBuilders.min("min").field("duration")))
    .subAggregation(PipelineAggregatorBuilders.avgBucket("avg_bucket_aggs","group_by_flights>min"))
 类似资料:
  • 我想知道如何在Elasticsearch中使用聚合时获得具有最高doc_count的存储桶。我正在使用Kibana示例数据kibana_sample_data_flights: 如果有一个存储桶具有最大文档计数,我可以将术语聚合的大小设置为1,但是如果有两个存储桶具有相同的最大文档计数,则这不起作用。 自从我涉足管道聚合以来,我觉得应该有一种简单的方法来实现这一点。最大桶聚合似乎能够处理多个最大桶

  • 问题内容: 我正在尝试使用以下查询对以下数据进行elasticsearch来执行术语聚合,输出将名称分解为标记(请参见下面的输出)。因此,我尝试将os_name映射为multi_field,但现在无法通过它查询。是否可以有没有令牌的索引?例如“ Fedora Core”? 查询: 数据: 输出: 映射: 问题答案: 实际上,您应该像这样更改映射 并且您的aggs应该更改为:

  • 我使用聚合从嵌套字段收集数据并卡住了一点 文件示例: ES允许通过rectangle.attributes._id来分组数据,但是有没有办法让一些“其他”桶把没有添加到任何组中的文档放在那里?或者,也许有一种方法可以通过创建查询来为文档创建桶。我认为桶将是完美的,因为我需要使用“其他”文档进行进一步的聚合。或者也许有一些很酷的解决方法 我使用这样的查询进行聚合 然后得到这个结果 这样的结果将是完美

  • 问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:

  • 我们目前正在开发一个多语言文档CMS。因此,我们有翻译成不同语言的文件。 对于使用Elasticsearch进行搜索,我们目前使用每种语言(德语、英语、法语……)一个索引,其中同一文档的所有翻译共享相同的ID。 当用户搜索特定术语时,我们希望在所有语言中搜索,但只返回不同ID的列表。据我所知,只有使用以下术语聚合才能做到这一点: 这很好,但是作为弹性搜索文档https://www.elastic.

  • 抱歉,如果已经问过了,但一直潜伏在SO周围,找不到任何适合我需要的东西。 基本上,我在使用ES的第一次快速尝试中试图实现的是在术语聚合中添加更多计数器。 快速尝试一下,我将以下请求发送给ES。 我现在得到的只是样本在文档中显示的内容。 但是,我真的不知道如何在桶中包含更多的内部聚合。会导致这样的文档的东西。 我应该如何构造聚合,以便按桶包含这些聚合?