对ES官网的reference的翻译,同时也是备忘,ES版本为7.5
下面是正文翻译,附上原文链接:
==================================================================================================
统计聚合
多值指标聚合,计算从聚合的文档中提取出来的数值相关的统计信息。这些数值可以从文档中特定的数值字段中提取也可以从给定的脚本中生成。
返回的统计包括:min、max、sum、count和avg
假设数据由表示学生测试成绩(0-100之间的数)的文档组成:
curl -XPOST host_ip:host_port/exams/_search?pretty
-H 'Content-Type: application/json'
-d '
{
"size": 0,
"aggs" : {
"grades_stats" : {
"stats" : {
"field" : "grade"
}
}
}
}'
上面的聚合计算所有文档的成绩统计。聚合类型是stats,field设置定义了聚合在文档中哪个数值字段上进行。上面的请求会返回下面的响应:
{
...
"aggregations": {
"grades_stats": {
"count": 2,
"min": 50.0,
"max": 100.0,
"avg": 75.0,
"sum": 150.0
}
}
}
聚合的名称(这里的grade_stats)也能作为从返回的响应中提取除聚合结果的key。
脚本
基于脚本计算成绩的统计信息:
curl -XPOST host_ip:host_port/exams/_search?pretty
-H 'Content-Type: application/json'
-d '
{
"size": 0,
"aggs" : {
"grades_stats" : {
"stats" : {
"script" : {
"lang": "painless",
"source": "doc['grade'].value"
}
}
}
}
}'
上面的请求会使用painless脚本语言编写的无参数的脚本,为了使用保存的脚本(我理解是脚本文件,id就是文件名),使用下面的请求:
curl -XPOST host_ip:host_port/exams/_search?pretty
-H 'Content-Type: application/json'
-d '
{
"size": 0,
"aggs" : {
"grades_stats" : {
"stats" : {
"script" : {
"id": "my_script",
"params": {
"field": "grade"
}
}
}
}
}
}'
值脚本
有可能exam的层次比学生的水平要高,我们需要进行成绩校正,我们可以使用值脚本来得到新的数据统计:
curl -XPOST host_ip:host_port/exams/_search?pretty
-H 'Content-Type: application/json'
-d '
{
"size": 0,
"aggs" : {
"grades_stats" : {
"stats" : {
"field": "grade",
"script" : {
"lang": "painless",
"source": "_value*params.correction",
"params": {
"correction": 1.2
}
}
}
}
}
}'
缺失的值
missing参数定义了缺失某些值的文档应该如何处理。默认的,这些文档会被忽略但我们也能把这些文档当作有值来处理:
curl -XPOST host_ip:host_port/exams/_search?pretty
-H 'Content-Type: application/json'
-d '
{
"size": 0,
"aggs" : {
"grades_stats" : {
"stats" : {
"field": "grade",
"missing": 0
}
}
}
}'
grade字段缺失值的文档将会和grade=0的文档落入相同的桶中。