1.格式
"aggregations" : {
"<aggregation_name>" : {
"<aggregation_type>" : {
<aggregation_body>
}
[,"meta" : { [<meta_data_body>] } ]?
[,"aggregations" : { [<sub_aggregation>]+ } ]?
}
[,"<aggregation_name_2>" : { ... } ]*
}
2. Metrics Aggregations 指标聚合
- 数值指标聚合是一种特殊类型的指标聚合,可输出数值。一些聚合输出单个数值指标(例如avg),称为单值数字指标聚合,其他聚合则生成多个指标(例如stats),称为多值数字指标聚合。当这些值充当某些存储桶聚合的直接子聚合(某些存储桶聚合使您可以基于每个存储桶中的数字度量对返回的存储桶进行排序)时,单值和多值数字度量聚合之间的区别将发挥作用。
2.0 terms 对某一字段进行聚合
"aggregations": {
"my_agg1": {
"terms": {
"field": "tag_brand_id"
}
},
"my_agg2": {
"terms": {
"field": "brand_cid_array"
}
}
}
2.1 Avg Aggregation 平均
POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : { "avg" : { "field" : "grade" } }
}
}
-------------------
{
...
"aggregations": {
"avg_grade": {
"value": 75.0
}
}
}
聚合的名称(上面的avg_grade)也用作键,通过该键可以从返回的响应中检索聚合结果。
missing参数定义应如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。
POST /exams/_search?size=0
{
"aggs" : {
"grade_avg" : {
"avg" : {
"field" : "grade",
"missing": 10
}
}
}
}
2.2 Cardinality Aggregation 类似count
单值指标聚合,用于计算不同值的近似计数
假设您正在为商店的销售建立索引,并希望计算与查询匹配的已售产品的唯一数量:
POST /sales/_search?size=0
{
"aggs" : {
"type_count" : {
"cardinality" : {
"field" : "type"
}
}
}
}
----------
{
...
"aggregations" : {
"type_count" : {
"value" : 3
}
}
}
2.3 Extended Stats Aggregation 扩展统计汇总
extended_stats聚合是stats聚合的扩展版本,其中添加了其他指标,such as sum_of_squares, variance, std_deviation and std_deviation_bounds.
GET /exams/_search
{
"size": 0,
"aggs" : {
"grades_stats" : { "extended_stats" : { "field" : "grade" } }
}
}
-----------------------
{
...
"aggregations": {
"grades_stats": {
"count": 2,
"min": 50.0,
"max": 100.0,
"avg": 75.0,
"sum": 150.0,
"sum_of_squares": 12500.0,
"variance": 625.0,
"std_deviation": 25.0,
"std_deviation_bounds": {
"upper": 125.0,
"lower": 25.0
}
}
}
}
2.4 Max Aggregation 最大值
POST /sales/_search?size=0
{
"aggs" : {
"max_price" : { "max" : { "field" : "price" } }
}
}
-------------------------
可以看出,聚合的名称(上面的max_price)也用作键,通过该键可以从返回的响应中检索聚合结果。
{
...
"aggregations": {
"max_price": {
"value": 200.0
}
}
}
-----------------------------
假设我们索引中的文档价格以美元为单位,但是我们希望以欧元为单位计算最大值(在本例中,转换率为1.2)。我们可以使用值脚本将转化率应用于每个值,然后再进行汇总:
POST /sales/_search
{
"aggs" : {
"max_price_in_euros" : {
"max" : {
"field" : "price",
"script" : {
"source" : "_value * params.conversion_rate",
"params" : {
"conversion_rate" : 1.2
}
}
}
}
}
}
2.5 Min Aggregation 最小值
POST /sales/_search?size=0
{
"aggs" : {
"min_price" : { "min" : { "field" : "price" } }
}
}
------------------
{
...
"aggregations": {
"min_price": {
"value": 10.0
}
}
}
2.6 Stats Aggregation 统计
The stats that are returned consist of: min, max, sum, count and avg.
POST /exams/_search?size=0
{
"aggs" : {
"grades_stats" : { "stats" : { "field" : "grade" } }
}
}
-----
"aggregations": {
"grades_stats": {
"count": 2,
"min": 50.0,
"max": 100.0,
"avg": 75.0,
"sum": 150.0
}
}
2.7 Sum Aggregation 总和
POST /sales/_search?size=0
{
"query" : {
"constant_score" : {
"filter" : {
"match" : { "type" : "hat" }
}
}
},
"aggs" : {
"hat_prices" : { "sum" : { "field" : "price" } }
}
}
------------------
{
...
"aggregations": {
"hat_prices": {
"value": 450.0
}
}
}
2.8 Returning only aggregation results 仅返回汇总结果
在许多情况下,需要汇总但不需要搜索匹配。对于这些情况,可以通过将size设置为0来忽略匹配。例如:
GET /twitter/_search
{
"size": 0,
"aggregations": {
"my_agg": {
"terms": {
"field": "text"
}
}
}
}
3. Bucket Aggregations 桶聚合
https://www.elastic.co/guide/en/elasticsearch/reference/6.7/search-aggregations-bucket.html