首页 > 其他分享 >elasticsearch之数据聚合

elasticsearch之数据聚合

时间:2025-01-17 13:44:31浏览次数:1  
标签:分组 聚合 field elasticsearch aggs 文档 数据 size

**聚合(aggregations**可以让我们极其方便的实现对数据的统计、分析、运算。例如:

  • 什么品牌的手机最受欢迎?
  • 这些手机的平均价格、最高价格、最低价格?
  • 这些手机每月的销售情况如何?

实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果。

聚合的种类

聚合常见的有三类:

  • **桶(Bucket)**聚合:用来对文档做分组

    • TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组
    • Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
  • **度量(Metric)**聚合:用以计算一些值,比如:最大值、最小值、平均值等

    • Avg:求平均值
    • Max:求最大值
    • Min:求最小值
    • Stats:同时求max、min、avg、sum等
  • **管道(pipeline)**聚合:其它聚合的结果为基础做聚合

**注意:**参加聚合的字段必须是keyword、日期、数值、布尔类型

Bucket聚合语法

TermAggregation 语法如下:

GET /hotel/_search
{
  "size": 0,  // 设置size为0,结果中不包含文档,只包含聚合结果
  "aggs": { // 定义聚合
    "聚合名": { 
      "聚合类型": { 
        "field": "参与聚合的字段", 
        "size": 聚合结果数量
      }
    }
  }
}

 

 

聚合结果排序

默认情况下,Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序。

我们可以指定order属性,自定义聚合的排序方式:

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "order": {
          "_count": "asc" // 按照_count升序排列
        },
        "size": 20
      }
    }
  }
}

限定聚合范围

默认情况下,Bucket聚合是对索引库的所有文档做聚合,但真实场景下,用户会输入搜索条件,因此聚合必须是对搜索结果聚合。那么聚合必须添加限定条件。

我们可以限定要聚合的文档范围,只要添加query条件即可:

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200 // 只对200元以下的文档聚合
      }
    }
  }, 
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}

 

Date Histogram 语法如下:

GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "聚合名称": {
      "date_histogram": {
        "field": "参与聚合的日期字段",
        "interval": "时间间隔"(year、quarter、month、week、day、hour)
      }
    }
  }
}

Metric聚合语法

酒店按照品牌分组,形成了一个个桶。现在对桶内的酒店做运算,获取每个品牌的用户评分的min、max、avg等值。

这就要用到Metric聚合了,例如stat聚合:就可以获取min、max、avg等结果。

语法如下:

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": { 
      "terms": { 
        "field": "brand", 
        "size": 20
      },
      "aggs": { // 是brands聚合的子聚合,也就是分组后对每组分别计算
        "score_stats": { // 聚合名称
          "stats": { // 聚合类型,这里stats可以计算min、max、avg等
            "field": "score" // 聚合字段,这里是score
          }
        }
      }
    }
  }
}

score_stats聚合是在brandAgg的聚合内部嵌套的子聚合。

另外,还可以给聚合结果做个排序,例如按照每个桶的酒店平均分做排序:

 

标签:分组,聚合,field,elasticsearch,aggs,文档,数据,size
From: https://www.cnblogs.com/WarBlog/p/18676773

相关文章

  • RestAPI实现聚合
    API语法聚合条件与query条件同级别,因此需要使用request.source()来指定聚合条件。聚合的结果解析:@OverridepublicMap<String,List<String>>filters(RequestParamsparams){try{//1.准备RequestSearchRequestrequest=newSearchRequest("h......
  • LabVIEW桥接传感器数据采集与校准程序
    该程序设计用于采集来自桥接传感器的数据,执行必要的设置(如桥接配置、信号采集参数、时间与触发设置),并进行适当的标定和偏移校正,最终通过图表呈现采集到的数据信息。程序包括多个模块,用于配置通道、触发条件、数据采集和校准过程,确保数据的准确性和可靠性。详细说明:通道设......
  • 如何将数据库字符集改为中文,让今后所有的数据库都支持中文
    最后一行有我自己的my.ini文件数据库输入中文数据时会变为乱码,这个时候,我们为每个数据库设置字符集,太过于麻烦,为数据库单独设置重启后又会消失Setcharacter_set_database=’utf8’;Setcharacter_set_server=’utf8’;先查看当前数据库参数输入代码:Showvariableslik......
  • 【分享】 100+ 套开源大数据可视化大屏Html5模板,全网最炫!
    今天给大家分享100+套开源大数据可视化炫酷大屏Html5模板,全网最新、最多、最全、最酷、最炫的大数据可视化模板!项目介绍BigDataView提供了100+套大数据可视化炫酷大屏Html5模板,涵盖了社区、物业、政务、交通、金融银行等多个行业。这些模板被认为是全网最新、最多、最全、最酷......
  • 大数据学习记录,Java基础(6)
    集合Java集合框架体系Java集合可分为Collection和Map两种体系:Collection接口:单列数据,定义了存取一组对象的方法的集合List:元素有序、可重复的集合Set:元素无序、不可重复的集合Map接口:双列数据,保存具有映射关系“key-value对”的集合Collection接口的方法add......
  • 大数据学习记录,Java基础(5)
    常用类objectobject类是Java中所有类的共同父类Object类的方法1.toString()默认情况下,toString()返回的是“对象的运行时类型@对象的hashCode值的十六进制形式"如果我们直接System.out.println(对象),默认会自动调用这个对象的toString(),打印的是地址值可以根据需要在用......
  • 大数据学习记录,Java基础(5)
    常用类objectobject类是Java中所有类的共同父类Object类的方法1.toString()默认情况下,toString()返回的是“对象的运行时类型@对象的hashCode值的十六进制形式"如果我们直接System.out.println(对象),默认会自动调用这个对象的toString(),打印的是地址值可以根据需要......
  • 大数据学习记录,Java基础(6)
    集合Java集合框架体系Java集合可分为Collection和Map两种体系:Collection接口:单列数据,定义了存取一组对象的方法的集合List:元素有序、可重复的集合Set:元素无序、不可重复的集合Map接口:双列数据,保存具有映射关系“key-value对”的集合Collection接口的方......
  • 基于 GEE ERA5 数据集监测不同土壤层水分和温度变化
    目录1数据介绍2完整代码3运行结果1数据介绍数据集:ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR")2完整代码//定义研究区域vargeometry=table;//加载ERA5数据集varera5Dataset=ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AG......
  • 基于 GEE 下载研究区 NASA 30 米高程和坡度数据
    目录1数据介绍2完整代码3运行结果1数据介绍NASADEM是NASA和USGS提供的全球数字高程模型(DEM),由2000年航天飞机雷达地形任务(SRTM)数据重处理生成,并结合了ASTERGDEM、ICESatGLAS和PRISM等数据的改进版本。其空间分辨率为30米,覆盖范围为全球60°N至56°S......