1、查询结构

{
     "query": {…},
     "aggs": {
         "aggregation_name": {
             "aggregation_type": {
                 ...
             }
         }
     }
 }

其中的aggs为aggregations缩写形式,两种都可以。

聚合的数量没有限制。每个聚合需要指定唯一名字及对应类型。

2、聚合类型

有三种类型:metrics,buckets和pipeline.

2.1 metrics聚合

avg

单值聚合。计算数值的平均值。

min

单值聚合。计算数值的最小值。

max

单值聚合。计算数值的最大值。

stats

多值聚合。计算的结果中包含min,max,sum,count和avg

extended_stats

多值聚合,计算的结果中除了包含stats有的,还包含sum_of_squqres,variance,std_deviation和std_deviation_bounds

value_count

单值聚合。用于统计文档值的个数,不会忽略重复值,重复值也会计算在内。

cardinality

单值聚合。计算不同值的个数。

percentiles

多值聚合。计算数值类型的一个或者多个百分比值。默认返回的是[1,5,25,50,75,95,99]对应的百分位数。

percentile_ranks

多值聚合,计算数值类型的一个或者多个百分排名

top_hits

跟踪最相关的文档。此聚合器目的是作为子聚合器,为了每个bucket来聚合最匹配文档。不建议top_hits作为最外层聚合。

geo_bounds

计算包含所有地理位置值的边界框

scripted_metric

执行脚本提供度量输出

avg支持的参数有:

  • missing,定义当文档缺少这个字段值时应该怎样处理。默认是忽略。如果设置了就将该值作为当前文档的值。
  • field,当指定的是直方图字段时,即内容为{"values":[], "counts":[]}时计算的平均值为values*counts/sum(counts)

min,max支持的参数与avg一样

stats支持的参数与avg一样

extended_stats支持额外的参数:

  • sigma,用来控制离均值标准方法为多少的需要显示。只能是非负值。

cardinality支持另外的参数:

  • precision_threshold,定义一个唯一的计数,低于该计数的计数将接近准确

percentiles支持额外的参数:

  • percents指定特殊的百分位。
  • keyed,默认是true,将唯一字符串键与单个bucket关联,并将范围作为哈希而不是数组返回

percentile_ranks支持额外的参数:

  • values指定特殊的百分位
  • keyed,默认是true,将唯一字符串键与单个bucket关联,并将范围作为哈希而不是数组返回

top_hits支持额外的参数:

  • from,第一个结果的偏移
  • size,每个bucket返回的最匹配记录的最大数。
  • sort,指定排序。

 支持的子section有

  • highlighting
  • explain
  • named queries
  • search fields
  • source filtering
  • stored fields
  • script fields
  • doc value fields
  • include versions
  • include sequence number and primary terms

geo_bounds支持的额外参数:

  • wrap_longitude,指定是否允许边界框与国际日期线重叠,默认是true

scripted_metric支持的参数

  • init_script,在收集文件之前执行。允许聚合安装初始状态
  • map_script,每个文档收集时执行。必选项。
  • combine_script,文档收集完成后每个分片立即执行。必选项
  • reduce_script,所有分片返回结果后,协调节点执行。必选项
  • params。可选项。作为变量传给init_script,map_script,combine_script.

2.2 buckets聚合

filter

在当前的文档集合上下文中定义一个匹配指定过滤器的所有文档bucket。通过用于减小当前聚合上下文到一个指定的文档集合中。

filters

定义多个bucket聚合,每个bucket与一个过滤器匹配。每个bucket收集匹配相关的过滤器的文档。

terms

基于源的多个bucket值的聚合,每个bucket是动态创建的,每个是唯一值。

range

基于源的多个bucket值的聚合,通过from,to定义区间范围,to值不包含

date_range

用于日期值的区间聚合,与range的区别在于from,to的值可以使用日期数学表达式计算的值。

ip_range

与date_range相似,专门用于ip地址的。除了from,to来定义区间,也可以使用mask来定义

missing

单个bucket聚合。在缺少字段值时在当前的文档上下文中创建所有文档的一个bucket。

histogram

多个bucket值的聚合,应用于数值。

date_histogram

与histogram相似,用于日期类型数据

geo_distance

多bucket聚合,用于geo_point类型字段,与range相似。

geohash_grid

多bucket聚合,根据geo_point和geo_shape值分组到表示网格的bucket中。

global

定义在搜索执行上下文内所有文档的一个bucket.

significant_terms

返回感兴趣的或者经常出现的词条。

sampler

用于限制子聚合处理最高分文档的采样。

children

一个特殊的单bucket聚合。选择指定类型,在join字段中定义的子文档。

nested

一个特殊的单bucket聚合,使得能够聚合嵌套文档。

reverse_nested

一个特殊的单bucket聚合,在嵌套文档中聚合父文档。必须定义在nested聚合中

histogram支持的参数有

  • interval,必须是一个正数值。
  • min_doc_count,指定区间内最少的文档个数。

date_histogram支持的参数:

  • calendar_interval,支持的值有minute(1m),hour(1h),day(1d),week(1w),month(1M),quartar(1q),year(1y)
  • fixed_interval,支持的单位有ms,s,m,h,d

geo_distance支持的参数

  • field,指定用于聚合的字段
  • origin指定原点
  • ranges,通过from,to指定元素区间
  • unit,默认单位是m,也支持mi(miles),in(inches),yd(yards),km(kilometers),cm(centimeters),mm(millimeter)
  • distance_type,指定距离计算模式。支持的值有arc,plane。默认的是arc

geohash_grid支持的参数有

  • precision,设置精度。

nested支持的参数

  • path,最外层文档

2.3 pipeline聚合

有两种类型

  • Parent,由父聚合输出提供,来计算新bucket或者对已经存在的bucket添加新聚合的一类聚合族
  • Sibling,由兄弟聚合的输出提供,作为兄弟聚合在同一层计算聚合。