ElasticSearch的聚合查询语法

ElasticSearch的聚合查询语法对指定字段的值按从小到大累计每个值对应的文档数的占比,返回指定占比比例对应的值。key-value形式返回,添加参数”keyed”false。这里指定值,查占比。注意占比是小于文档值的比例。根据性别分组,展示工资排名top3。类似mysql的count。根据性别分组求平均工资。…

大家好,欢迎来到IT知识分享网。

一、ES聚合分析查询的写法

"aggregations" : {
    "<aggregation_name>" : {                                 <!--聚合的名字 -->
        "<aggregation_type>" : {                             <!--聚合的类型 -->
            <aggregation_body>                               <!--聚合体:对哪些字段进行聚合 -->
        }
        [,"meta" : {  [<meta_data_body>] } ]?                <!--元 -->
        [,"aggregations" : { [<sub_aggregation>]+ } ]?       <!--在聚合里面在定义子聚合 -->
    }
}

二、求和(Sum)

求所有老师的薪资总和

size:0,参数表示不用返回文档列表,只返回汇总的数据即可

GET teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "sum_salary":{ 
   
      "sum":{ 
   
        "field":"salary"
      }
    }
  }
}

三、最大值(Max)

求薪资最大值

GET /teacher_info/_search
{ 
   
    "size":0,
    "aggs":{ 
   
        "max_salary":{ 
   
            "max":{ 
   
                "field":"salary"
            }
        }
    }
}

四、最小值(Min)

求薪资最小值

GET /teacher_info/_search
{ 
   
    "size":"0",
    "aggs":{ 
   
        "min_salary":{ 
   
            "min":{ 
   
                "field":"salary"
            }
        }
    }
}

五、平均值(Avg)

求薪资平均值

GET /teacher_info/_search
{ 
   
    "size":"0",
    "aggs":{ 
   
        "avg_salary":{ 
   
            "avg":{ 
   
                "field":"salary"
            }
        }
    }
}

六、去重数值(cardinality)

  • 类似mysql的count distinct
  • 案例:老师一共教了多少学科
GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "job_count":{ 
   
      "cardinality": { 
   
        "field": "job.keyword"
      }
    }
  }
}

七、多值查询-最大最小值和平均值

查询最低、最高和平均工资

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "max_salary":{ 
   
      "max":{ 
   
        "field":"salary"
      }
    },
    "min_salary":{ 
   
      "min":{ 
   
        "field":"salary"
      }
    },
    "avg_salary":{ 
   
      "avg":{ 
   
        "field":"salary"
      }
    }
  }
}

八、返回多个聚合值(Status)

stats统计,请求后会直接显示多种聚合结果,总记录数,最大值,最小值,平均值,汇总值

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "salary_stats":{ 
   
      "stats":{ 
   
        "field":"salary"
      }
    }
  }
}

九、百分比(Percentiles)

对指定字段的值按从小到大累计每个值对应的文档数的占比,返回指定占比比例对应的值

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "age_percentiles":{ 
   
      "percentiles":{ 
   
        "field":"age"
      }
    }
  }
}

key-value形式返回,添加参数”keyed”:false

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "age_percentiles":{ 
   
      "percentiles":{ 
   
        "field":"age",
        "keyed":false
      }
    }
  }
}

十、文档值占比(Percentile Ranks)

这里指定值,查占比。注意占比是小于文档值的比例

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "age_percentiles":{ 
   
      "percentile_ranks":{ 
   
        "field":"age",
        "values":[22,25,33]
      }
    }
  }
}

十一、中位数查询

求工资中位数

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "load_time_outlier":{ 
   
      "percentiles":{ 
   
        "field":"salary",
        "percents":[50,99],
        "keyed":false
      }
    }
  }
}

十二、分组取Top N之(Top Hits)

根据性别分组,展示工资排名top3

GET /teacher_info/_search?size=0
{ 
   
  "aggs":{ 
   
    "top_tags":{ 
   
      "terms":{ 
   
        "field":"sex"
      },
      "aggs":{ 
   
        "top_sales_hits":{ 
   
          "top_hits":{ 
   
            "sort":[
              { 
   
                "salary":{ 
   
                  "order":"desc"
                }
              }
            ],
            "_source":{ 
   
              "includes":["name","sex","salary"]
            },
            "size":3
          }
        }
      }
    }
  }
}

十三、分组之聚合

根据性别分组求平均工资

GET /teacher_info/_search
{ 
   
  "size":0,
  "aggs":{ 
   
    "top_tags":{ 
   
      "terms":{ 
   
        "field":"sex"
      },
      "agg":{ 
   
        "avg_salary":{ 
   
          "avg":{ 
   
            "field":"salary"
          }
        }
      }
    }
  }
}

十四、总记录数查询

类似mysql的count

# 方式1:统计年龄>=25的记录数
GET /teacher_info/_count
{ 
   
  "query":{ 
   
    "range":{ 
   
      "age":{ 
   
        "gte":25
      }
    }
  }
}
# 方式2:统计年龄>=25的记录数
GET teacher_info/_search?size=0
{ 
   
  "query":{ 
   
    "range":{ 
   
      "age":{ 
   
        "gte":25
      }
    }
  }
}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23833.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信