两个主要概念
    1、bucket:一个数据分组,如group by city,对于相同的city就放在同一个bucket中。
    2、metric:对一个数据分组执行的统计,即对某一个bucket执行聚合分析,如求平均、求和、最大、最小等。

    例子一:

    1. #计算每个studymodel下的商品数量
    2. #类同select studymodelcount(*) from book group by studymodel
    3. GET /book/_search
    4. {
    5. "size": 0, #表示hits里面的数据,0表示不显示原始数据
    6. "query": {
    7. "match_all": {} #这里可以带上搜索条件,相当于where条件
    8. },
    9. "aggs": {
    10. "group_by_model": { #别名
    11. "terms": { "field": "studymodel" } #聚合的条件
    12. }
    13. }
    14. }

    例子二:

    1. #先分组,再算每组的平均值,计算每个tag下的商品的平均价格
    2. GET /book/_search
    3. {
    4. "size": 0,
    5. "aggs" : {
    6. "group_by_tags" : {
    7. "terms" : {
    8. "field" : "tags",
    9. "order": { #设置根据avg_price倒序排序
    10. "avg_price": "desc"
    11. }
    12. },
    13. "aggs" : { #在aggs里面再加一个子aggs,即可实现
    14. "avg_price" : {
    15. "avg" : { "field" : "price" } ##通过avg函数统计平均值
    16. }
    17. }
    18. }
    19. }
    20. }

    例子三:

    1. #按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格
    2. GET /book/_search
    3. {
    4. "size": 0,
    5. "aggs": {
    6. "group_by_price": {
    7. "range": {
    8. "field": "price",
    9. "ranges": [
    10. {
    11. "from": 0,
    12. "to": 40
    13. },
    14. {
    15. "from": 40,
    16. "to": 60
    17. },
    18. {
    19. "from": 60,
    20. "to": 80
    21. }
    22. ]
    23. },
    24. "aggs": {
    25. "group_by_tags": {
    26. "terms": {
    27. "field": "tags"
    28. },
    29. "aggs": {
    30. "average_price": {
    31. "avg": {
    32. "field": "price"
    33. }
    34. }
    35. }
    36. }
    37. }
    38. }
    39. }
    40. }