Elasticsearch Weighted Avg Aggregationedit 加权平均聚合
在计算常规平均值时,每个数据点具有相等的 权重,它对最终值的贡献相等。另一方面,加权平均数对每个数据点的权重不同。每个数据点对最终值的贡献是从文档中提取出来的,或者由脚本提供。
一个普通的平均值可以被认为是一个加权平均值,其中每个值的隐含权值为1
如果我们的文档有一个包含0-100数字分数的“grade”字段和一个包含任意数字权重的“weight”字段,那么我们可以使用下面的方法计算加权平均值
GET company_es/_search
{
"aggs": {
"weighted_avg_capital_number": {
"weighted_avg":{
"value":{
"field": "capitalNumber"//主要聚合字段
},
"weight":{
"field":"cid"//用来加权的字段
}
}
}
}
}
------------------------------返回文档如下---------------------------------------
"aggregations" : {
"weighted_avg_capital_number" : {
"value" : 769.8884338776376
}
}
虽然每个字段允许多个值,但是只允许一个权重。如果聚合遇到一个文档有多个权值(例如,权值字段是一个多值字段),它将抛出一个异常。如果您遇到这种情况,您将需要为weight字段指定一个脚本,并使用该脚本将多个值组合成一个要使用的值
此单一权重将独立应用于从value字段中提取的每个值
值和权重都可以从脚本而不是字段派生。
POST /exams/_search
{
"size": 0,
"aggs" : {
"weighted_grade": {
"weighted_avg": {
"value": {
"script": "doc.grade.value + 1"
},
"weight": {
"script": "doc.weight.value + 1"
}
}
}
}
}
缺少参数定义了应该如何处理缺少值的文档。值和权重的默认行为不同。默认情况下,如果缺少值字段,则忽略文档,聚合将转移到下一个文档。如果缺少权值字段,则假定其权值为 1(与正常平均值一样)。可以使用缺少的参数覆盖这两个缺省值
POST /exams/_search
{
"size": 0,
"aggs" : {
"weighted_grade": {
"weighted_avg": {
"value": {
"field": "grade",
"missing": 2
},
"weight": {
"field": "weight",
"missing": 3
}
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论