elk之restful api 聚合查询分析

一,      group分组

将所有学生按照年龄分组,并得出每个组合的个数。

 GET school3/student2/_search

{

"size"=0,                     //加上size=0,就不会打印操作的具体数据

      "aggs":{

          "group_age":{

            "terms": {

              "field": "age"

            }   

          }

        }

}

结果:

Buckets. Key:分组的关键字。

Buckets. Count:该分组里数据的个数。

"aggregations": {

    "group_age": {

     "doc_count_error_upper_bound": 0,

     "sum_other_doc_count": 0,

      "buckets": [

        {

          "key": 23,

         "doc_count": 1

        },

        {

          "key": 25,

         "doc_count": 1

        },

        {

          "key": 28,

         "doc_count": 1

        },

        {

          "key": 29,

         "doc_count": 1

        },

        {

          "key": 89,

         "doc_count": 1

        }

      ]

    }  

字符串分组会报错,要修改mapping中name字段的fielddata为true

PUT school3/_mapping/student2

{

  "properties": {

    "name":{

      "type":"text",

      "fielddata":"true"

    }

  }

}

二,先查询再进行分组。

        

先查询出来name中包含夏文杰的数据,再通过age进行分组,再计算出每个分组的数量。

GET school3/student2/_search

    {

      "query": {

        "match": {

          "name":"夏文杰"

        }

      },

      "aggs":{

         "group_name":{

            "terms":{

             "field": "age"

            }

          }

        }

    }

三,先分组,再对各组中的数据做求平均,

按照学生的age进行分组,求出每组学生中的分数平均值

GET school3/student2/_search

   {

     "size": 0,

     "aggs":{

         "group_name":{

           "terms": {

              "field":"age"

           },

           "aggs": {

              "avg_score": {

                "avg": {

                 "field":"score"

                }

              }

           }

         }

       }

}

四,基于上一个做排序

按照学生的age进行分组,求出每组学生中的分数平均值,并按照分数平均值的大小降序排序。

GET school3/student2/_search

   {

     "size": 0,

     "aggs":{

         "group_name":{

           "terms": {

              "field":"age",

              "order": {

                "avg_score":"desc"

              }

           },

           "aggs": {

              "avg_score": {

                "avg": {

                "field":"score"

                }

              }

           }

         }

       }

}

 

五.基于上面的再加上自定义分组。

先对score进行自定义分组1-90,90-100,再根据age进行分组,再算出分组中score的平均值。

  GET school3/student2/_search

    {

      "size": 0,

      "aggs":{

          "group_score":{

            "range": {

              "field":"score",

              "ranges":[

                  {

                    "from":1,

                    "to":90

                  },

                  {

                    "from":90,

                    "to":100

                  }

                ]

            },

            "aggs": {

              "group_age": {

                "terms": {

                  "field":"age"

                },

                "aggs": {

                  "avg_score": {

                    "avg": {

                      "field":"score"

                    }

                  }

                }

              }

            }

          }

        }

    }

结果:

"aggregations":{

    "group_score": {

      "buckets": [

        {

          "key":"1.0-90.0",

          "from": 1,

          "to": 90,

          "doc_count": 3,

          "group_age": {

           "doc_count_error_upper_bound": 0,

            "sum_other_doc_count": 0,

            "buckets": [

              {

                "key": 23,

                "doc_count": 1,

                "avg_score": {

                  "value": 11

                }

              },

              {

                "key": 25,

                "doc_count": 1,

                "avg_score": {

                  "value": 11

                }

              },

              {

                "key": 89,

                "doc_count": 1,

                "avg_score": {

                  "value": 12

                }

              }

            ]

          }

        },

        {

          "key":"90.0-100.0",

          "from": 90,

          "to": 100,

          "doc_count": 1,

          "group_age": {

           "doc_count_error_upper_bound": 0,

            "sum_other_doc_count": 0,

            "buckets": [

              {

                "key": 28,

                "doc_count": 1,

                "avg_score": {

                  "value": 99

                }

              }

            ]

          }

        }

      ]

    }


猜你喜欢

转载自blog.csdn.net/a1148233614/article/details/80064368
今日推荐