首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能否将聚合的结果传递给范围聚合?

我能否将聚合的结果传递给范围聚合?
EN

Stack Overflow用户
提问于 2019-01-09 05:22:55
回答 1查看 920关注 0票数 1

我有以下数据集

代码语言:javascript
复制
    [
      {
        "rating": "10",
        "subject": "maths"
      },
      {
        "rating": "9",
        "subject": "physics"
      },
      {
        "rating": "10",
        "subject": "chemistry"
      },
      {
        "rating": "5",
        "subject": "physics"
      },
      {
        "rating": "2",
        "subject": "geography"
      },
      {
        "rating": "5",
        "subject": "maths"
      },
      {
        "rating": "1",
        "subject": "geography"
      },
      {
        "rating": "5",
        "subject": "maths"
      }, 
      {
        "rating": "8",
        "subject": "chemistry"
      }
    ] 

我需要做的是找出每个主题的平均评分,然后用弹性搜索查询计算出评级范围内的主体# (0-2,2-5,5-8,8-10)。

到目前为止,我的查询为每个主题创建了桶,计算每个桶的avg。但我无法找到如何对复合聚合的结果进行范围聚合。有可能吗?还有别的选择吗?

这里是我的查询,它根据主题对数据进行存储,并计算avg评级。

代码语言:javascript
复制
GET kibana_sample/_search
{
  "size":0,
    "aggs" : {
        "my_buckets": {
            "composite" : {
                "sources" : [
                    { "subject": { "terms" : { "field": "subject" } } }
                ]
            },
            "aggs": {
              "avg_rating": {
                "avg" : { "field" : "rating" }
              }
            }
         }
     }
} 

其结果如下。

代码语言:javascript
复制
"aggregations": {
    "my_buckets": {
      "buckets": [
        {
          "key": {
            "subject": "maths"
          },
          "doc_count": 3,
          "avg_rating": {
            "value": 6.66666667
          }
        },
        {
          "key": {
            "subject": "physics"
          },
          "doc_count": 2,
          "avg_rating": {
            "value": 7
          }
        },
        {
          "key": {
            "subject": "chemistry"
          },
          "doc_count": 2,
          "avg_rating": {
            "value": 9
          }
        },
        {
          "key": {
            "subject": "geography"
          },
          "doc_count": 2,
          "avg_rating": {
            "value": 1.5
          }
        }
      ]
   }
}

这一切都很好,但现在我需要在这个结果之上执行一个范围聚合,以获得评级范围内的主体数量,例如:

评级范围:{0-2}:1主题,{2-5}:0主题,{5-8}:2主题,{8-10}:1主题

EN

回答 1

Stack Overflow用户

发布于 2019-01-09 10:52:05

您可以使用管道聚合,以便通过更多聚合连接一个聚合结果。您可以做的另一件事是在管道中使用脚本,以便只过滤相关的结果。

查看这里的脚本示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html

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

https://stackoverflow.com/questions/54103677

复制
相关文章

相似问题

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