Elasticsearch--聚合

目录

聚合

可用的聚合

度量聚合

  1. max、min、sum、avg(用在数值型字段):下面是对字段year求最小值
{
    "aggs":{
        "agg_name":{
            "min":{
                "field":"year"
            }
        }
    }
}
  1. 使用脚本
{
    "aggs":{
        "agg_name":{
            "min":{
                "field":"year",
                "script":"_value - mod",
                "params":{
                    "mod":100
                }
            }
        }
    }
}
  1. value_count聚合:统计字段有的所有标记,即该字段不为空的记录数量。有的分析字段在内部被分词,该聚合是统计原始未经分析的版本。
{
    "aggs":{
        "agg_name":{
            "value_count":{
                "field":"year"
            }
        }
    }
}
  1. stat和extended_stat聚合:stat聚合统计数值型字段的统计信息包括:最大,最小,平均,总量,总和。extended_stat在stat统计信息的基础上,添加了平方和,方差和标准差。

桶聚合

桶聚合返回很多子集,并限制输入数据到一个特殊的叫做桶的子集中。

  1. terms聚合:为字段每个词条返回一个桶。还可以定义的属性包括:size(返回多少个桶),order(_term表示key,_count表示doc_count)。下面对copy字段统计
{
    "aggs":{
        "agg_name":{
            "terms":{
                "field":"copy",
                "size":20,
                "order":{"_term":"desc"}
            }
        }
    }
}

返回多个桶,下面是返回了一个桶

{
    "agg_name":{
        "buckets":{
            "key":4,
            "doc_count":2
        }
    }
}
  1. range聚合:使用定义的范围来创建桶。下面的例子检查给定时间区间的数据
{
    "aggs":{
        "year":{
            "range":{
                "field":"year",
                "keyed":true,
                "range":[
                    {"key":"A","to":1850 },
                    {"key":"B","from":1851, "to":1900 },
                    {"key":"C","from":1901, "to":1950 },
                    {"key":"D","from":2001 }
                ]
            }
        }
    }
}

上边的keyed属性可以没有,加上后,es会为结果添加标签(名称),使结果会更清晰明了,如果不想使用es自动创建的标签,加入key属性,添加自己的标签。

  1. date_range聚合:类似range聚合,只不过使用的字段必须是日期类型。如果统计一个随时间变化的聚合时,可以使用now-3d这样的表达式,表示从现在起往前三天。
  2. nested聚合
  3. histogram聚合
{
    "aggs":{
        "year":{
            "histogram":{
                "field":"year",
                "interval":100
            }
        }
    }
}

interval定义了每个桶的范围长度,上例的意思桶将以100年为周期进行创建。其他还有min_doc_count属性。

  1. 时区:Elasticsearch将日期存储成UTC时区,有三个属性可以设置:pre_zone, post_zone, time_zone。使用方式可以看Kibana请求
  2. geo_distance:
  3. geohash_grid

聚合的嵌套

执行顺序是先执行父嵌套,再执行子嵌套

桶排序和嵌套聚合

Elasticsearch还可以使用嵌套聚合里的值

猜你喜欢

转载自www.cnblogs.com/51zone/p/9841007.html
今日推荐