Elasticsearch Weighted Avg Aggregationedit 加权平均聚合

发布于 2021-06-15 12:33:42 字数 1565 浏览 1187 评论 0

在计算常规平均值时,每个数据点具有相等的 权重,它对最终值的贡献相等。另一方面,加权平均数对每个数据点的权重不同。每个数据点对最终值的贡献是从文档中提取出来的,或者由脚本提供。

一个普通的平均值可以被认为是一个加权平均值,其中每个值的隐含权值为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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

文章 0 评论 0

云雾

文章 0 评论 0

夏尔

文章 0 评论 0

alipaysp_yxYxYl56FW

文章 0 评论 0

涙—继续流

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文