ES系列15:ES的指标聚合有哪些呢?在这里,我都给你总结好了

 点击上方“方才编程”,即可关注我!

本文目标

通过本文,你将系统掌握常用的指标聚合,了解每种指标聚合的使用场景和语法。

ps:本文基于ES 7.7.1【文末附《指标聚合Metric Agg详解》xmind 获取方式】

本文知识导航

ps:因为篇幅问题,TeHero在文章中就只通过示例进行简单讲解,涉及其他的注意事项,重要参数等,见xmind截图,毕竟一图胜千言!【文末有xmind源文件获取方式】。

01 写在前面

通过上图我们可以看到,一共有18种类型的 Metrics Agg,而且这只是ES7.7.1,TeHero是在6月初安装的ES,当时最新版就是7.7.1,但是半个月后,ES更新了!!!又!!又!!又!!新增了几种聚合方法。

所以,对于每一种聚合类型,我们都去详细学习并掌握是比较费时间的,个人建议可以按如下方式学习:

  • 1)了解每种聚合类型的使用场景,简单而言,就是知道每种聚合是干嘛的,能对数据做怎样的分析;

  • 2)掌握常用的聚合操作,了解其注意事项和重要参数;

  • 3)完成以上2点,我觉得就差不多了,在实际工作中,面对需求,我们知道可以用哪些聚合操作解决需求即可,需要用到的时候再去详细学习具体的语法。

02 Metrics Agg 详解

Metrics Aggregations 指标分析类型,就是一些数学运算,对文档字段进行统计分析,类似于 sql 的 COUNT() 、 SUM() 、 MAX() 等统计方法

2.1 4个基本统计聚合

这4个聚合我相信各位小伙伴一看就能明白,就简答看个示例,学习下语法即可:

POST / exams / _search ? size = 0 {
  "aggs": {
    "avg_grade": {
      "avg": {
        "field": "grade"
      }
    }
  }
}

结果:

{
  ...
  "aggregations": {
    "avg_grade": {
      "value": 75.0
    }
  }
}

2.2 Value Count value计数聚合

简单示例,了解语法:

POST / sales / _search ? size = 0 {
  "aggs": {
    "types_count": {
      "value_count": {
        "field": "type"
      }
    }
  }
}

结果:

{ ...
"aggregations": {
    "types_count": {
      "value": 7
    }
  }
}

2.3 Stats 统计聚合

就是一个聚合函数,包含了上述5种聚合,简单看个示例,学习语法:

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.4 Weighted Avg 加权平均聚合

加权平均聚合和Avg Agg类似,掌握其计算公式: ∑(value * weight) / ∑(weight)。

场景示例:博客文章指数计算:阅读量*作者影响力

POST / blogs_index / _search {
  "size": 0,
  "aggs": {
    "weighted_grade": {
      "weighted_avg": {
        "value": {
          "field": "views"
        },
        "weight": {
          "field": "influence"
        }
      }
    }
  }
}

结果:

{
  ...
  "aggregations": {
    "weighted_grade": {
      "value": 70.0
    }
  }
}

2.5 cardinality 基数聚合

场景示例:统计已销售汽车的颜色一共有多少种

GET / cars / _search {
  "size": 0,
  "aggs": {
    "distinct_colors": {
      "cardinality": {
        "field": "color"
      }
    }
  }
}

结果:

"aggregations": {
  "distinct_colors": {
    "value": 3
  }
}

2.6 Top Hits 热门匹配聚合

场景示例:获取每种类型商品,其中价格最高的商品详情

POST / test / _search ? size = 0 {
  "aggs": {
    "top_tags": {
      "terms": {
        "field": "type",
        "size": 3
      },
      "aggs": {
        "top_sales_hits": {
          "top_hits": {
            "sort": [{
              "price": {
                "order": "desc"
              }
            }],
            "_source": {
              "includes": ["date", "price"]
            },
            "size": 1
          }
        }
      }
    }
  }
}

结果:

"aggregations": {
  "top_tags": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [{
      "key": 1,
      "doc_count": 2,
      "top_sales_hits": {
        "hits": {
          "total": {
            "value": 2,
            "relation": "eq"
          },
          "max_score": null,
          "hits": [{
            "_index": "test",
            "_type": "_doc",
            "_id": "ovDRLXMBqw5d_PggL2w6",
            "_score": null,
            "_source": {
              "date": 6435,
              "price": 3
            },
            "sort": [3]
          }]
        }
      }
    }, {
      "key": 2,
      "doc_count": 2,
      "top_sales_hits": {
        "hits": {
          "total": {
            "value": 2,
            "relation": "eq"
          },
          "max_score": null,
          "hits": [{
            "_index": "test",
            "_type": "_doc",
            "_id": "o_DRLXMBqw5d_PggL2w6",
            "_score": null,
            "_source": {
              "date": 5525,
              "price": 5
            },
            "sort": [5]
          }]
        }
      }
    }]
  }
}

2.7 Top Metrics 最高度量标准聚合

看个示例,对比Top Hit Agg 的例子,如下DSL和上述例子效果一致,只是响应结构不同:

POST / sales / _search ? size = 0 {
  "aggs": {
    "top_tags": {
      "terms": {
        "field": "type",
        "size": 3
      },
      "aggs": {
        "top_sales_hits": {
          "top_metrics": {
            "metrics": [{
              "field": "date"
            }, {
              "field": "price"
            }],
            "sort": {
              "price": "desc"
            }
          }
        }
      }
    }
  }
}

结果:

"aggregations": {
  "top_tags": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [{
      "key": 1,
      "doc_count": 2,
      "top_sales_hits": {
        "top": [{
          "sort": [3],
          "metrics": {
            "date": 6435,
            "price": 3
          }
        }]
      }
    }, {
      "key": 2,
      "doc_count": 2,
      "top_sales_hits": {
        "top": [{
          "sort": [5],
          "metrics": {
            "date": 5525,
            "price": 5
          }
        }]
      }
    }]
  }
}

2.8 剩余8种Metric聚合

更多详情内容,可参考官网。

下期预告:管道聚合详解【关注公众号:方才编程,系统学习ES】

待续


       

ES系列13:彻底掌握相关度

ES系列14:25种桶聚合详解

ES系列12:Compound queries 之  Bool query

【点击加入 ES学习社群,即可免费领取《指标聚合Metric Agg详解》xmind,原创不易,你的在看就是最大的鼓励

在Elasticsearch中,聚合器(Aggregations)是用于对搜索结果进行汇总和分析的重要工具。它们允许你在查询结果中执行复杂的数据处理,例如计算总和、平均值、分组、过滤等。Elasticsearch提供了多种类型的聚合器,以下是其中一些主要的: 1. **计数器(Bucket Count)**:最基本的聚合器,用于计算文档数量。 2. **值汇总(Value Sum, Avg, Min, Max)**:计算字段的数值总和、平均值、最小值或最大值。 3. **分桶(Bucketing Aggregators)**: - **分桶聚合器(Bucket Aggregation)**:如术语频率(Term Frequency)、IP范围(IP Range)和日期范围(Date Range)。 - **分组(Grouping)**:如分组桶(Terms, Histogram, Date Histogram)对数据进行分类并计算每个组的结果。 - **子分桶(Sub-Bucketing)**:如nested、geohash_grid等,用于嵌套文档的字段。 4. **最小值/最大值(Min/Max)**:找到指定字段的最小值或最大值。 5. **百分位数(Percentiles)**:计算数值字段的特定百分位数。 6. **卡方检验(Cardinality)**:估算字段值的数量,包括估算不确定性。 7. **直方图(Histogram)**:创建基于时间或数值的区间分布。 8. **地理聚合(Geo Aggregations)**:如geo_centroid、geo_bounds、geohash_grid等,用于地理位置数据。 9. **聚合管道(Pipeline Aggregations)**:允许你串联多个聚合操作以构建更复杂的分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值