关闭

elasticsearch聚合案例--分组、求最大值再求最大值的均值

标签: elasticsearch聚合子聚合分组
2182人阅读 评论(2) 收藏 举报
分类:

一、需求

A、B、C代表3个用户,第二列代表各自的得分,求A、B、C的最好成绩以及A、B、C最好成绩的均值

A 10
A 11
A 13
B 11
B 11
B 12
C 10
C 10
C 11
C 15

二、思路

先terms分组,求最大值,最后加一个pipeline均值。一开始想用bucket_script解决,实验发现走不通,但是bucket_script在聚合结果之上操作很有用

三、测试数据

PUT sport 
{
  "mappings": {
    "grade": {
      "properties": {
        "user": {
          "type": "keyword"
        },
        "grade":{
          "type": "integer"
        }
      }
    }
  }
}

PUT sport/grade/1
{
  "user":"A",
  "grade":10
}

PUT sport/grade/2
{
  "user":"A",
  "grade":11
}

PUT sport/grade/3
{
  "user":"A",
  "grade":13
}

PUT sport/grade/4
{
  "user":"B",
  "grade":11
}
PUT sport/grade/5
{
  "user":"B",
  "grade":11
}

PUT sport/grade/6
{
  "user":"B",
  "grade":12
}


PUT sport/grade/7
{
  "user":"C",
  "grade":10
}

PUT sport/grade/8
{
  "user":"C",
  "grade":10
}

PUT sport/grade/9
{
  "user":"C",
  "grade":11
}

PUT sport/grade/10
{
  "user":"C",
  "grade":15
}

四、聚合

GET sport/_search
{
  "size": 0,
  "aggs": {
    "avg_score": {
      "terms": {
        "field": "user"
      },
      "aggs": {
        "max_score": {
          "max": {
            "field": "grade"
          }
        }
      }
    },
    "avg_max_score": {
      "avg_bucket": {
        "buckets_path": "avg_score>max_score"
      }
    }
  }
}

结果:

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 10,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "avg_score": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "C",
          "doc_count": 4,
          "max_score": {
            "value": 15
          }
        },
        {
          "key": "A",
          "doc_count": 3,
          "max_score": {
            "value": 13
          }
        },
        {
          "key": "B",
          "doc_count": 3,
          "max_score": {
            "value": 12
          }
        }
      ]
    },
    "avg_max_score": {
      "value": 13.333333333333334
    }
  }
}
3
0
查看评论

elasticsearch设置最大返回条数

可以通过url设置,方便快捷不用重启。如下: curl -XPUT http://127.0.0.1:9200/book/_settings -d '{ "index" : { "max_result_window" : 200000000}}&#...
  • hhj724
  • hhj724
  • 2017-06-29 14:59
  • 2590

[Elasticsearch] 多字段搜索 (二) - 最佳字段查询及其调优

最佳字段(Best Fields) 假设我们有一个让用户搜索博客文章的网站,就像这两份文档一样: PUT /my_index/my_type/1 { "title": "Quick brown rabbits", "b...
  • dm_vincent
  • dm_vincent
  • 2014-12-09 10:23
  • 30025

关于Elasticsearch单个索引文档最大数量问题

因为ElasticSearch是一个基于Lucene的搜索服务器。Lucene的索引有个难以克服的限制,导致Elasticsearch的单个分片存在最大文档数量限制,一个索引分片的最大文档数量是20亿。
  • feixuedongji
  • feixuedongji
  • 2016-02-15 17:05
  • 4046

Elasticsearch分析聚合

Elasticsearch不仅仅适合做全文检索,分析聚合功能也很好用。下面通过实例来学习。 一、准备数据 {"index":{ "_index": "books", "_type": "IT"...
  • zxjiayou1314
  • zxjiayou1314
  • 2016-12-22 14:36
  • 1384

[Elasticsearch] 聚合的测试数据

本章翻译自Elasticsearch官方指南的Aggregation Test-Drive一章。 聚合的测试数据(Aggregation Test-Drive) 我们将学习各种聚合以及它们的语法,但是最好的学习方法还是通过例子。一旦你了解了如何思考聚合以及如何对它们进行合...
  • dm_vincent
  • dm_vincent
  • 2015-01-05 00:02
  • 36192

[Elasticsearch] 聚合 - 时间数据处理(Looking at Time)

本章翻译自Elasticsearch官方指南的Looking at Time一章。 时间数据处理(Looking at Time) 如果在ES中,搜索是最常见的行为,那么创建日期柱状图(Date Histogram)肯定是第二常见的。为什么要使用日期柱状图呢? 想象...
  • dm_vincent
  • dm_vincent
  • 2015-01-11 00:17
  • 42873

Elasticsearch分组聚合-查询

1 统计某个字段下的分组情况类似如下功能: select count(*) from mytable group by myfieldcurl -XPOST 'localhost:19200/ylchou-0-2015-10-07/_search?pretty' -d ' ...
  • zkq_1986
  • zkq_1986
  • 2016-08-31 16:38
  • 1857

[Elasticsearch] 过滤查询以及聚合(Filtering Queries and Aggregations)

本章翻译自Elasticsearch官方指南的Filtering Queries and Aggregations一章。 过滤查询以及聚合 A natural extension to aggregation scoping is filtering. Because the aggre...
  • dm_vincent
  • dm_vincent
  • 2015-01-16 00:15
  • 72397

深究|Elasticsearch单字段支持的最大字符数?

在业务系统中,遇到过两个问题:  问题1:设置为keyword类型的字段,插入很长的大段内容后,报字符超出异常,无法插入。  问题2:检索超过ignore_above设定长度的字段后,无法返回结果。 思考:Elasticsearch单字段支持的最大字符数? 设置i...
  • u010463032
  • u010463032
  • 2017-12-21 14:45
  • 364

修改ElasticSearch默认的from size

如果需要搜索分页,可以通过from size组合来进行。from表示从第几行开始,size表示查询多少条文档。from默认为0,size默认为10, 如果搜索size大于10000,需要设置index.max_result_window参数 注意:size的大小不能超过index.max_r...
  • lu_wei_wei
  • lu_wei_wei
  • 2016-04-07 17:04
  • 7322
    《从Lucene到Elasticsearch:全文检索实战》
    Lucene、ES、ELK开发交流群:370734940
    Lucene、ES、ELK开发交流
    个人资料
    • 访问:935742次
    • 积分:9246
    • 等级:
    • 排名:第2379名
    • 原创:209篇
    • 转载:2篇
    • 译文:6篇
    • 评论:468条
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    博客专栏
    文章分类
    最新评论