首页 > 解决方案 > ElasticSearch 中的聚合操作

问题描述

我有一个问题陈述,其中我有 Es 中的车辆数据,字段时间以秒为单位,时间以毫秒为单位和速度。现在我想在前端获取数据并绘制速度与时间的关系图。但问题是有很多数据点,因为一秒钟有 30-40 毫秒的条目和相应的速度。现在为了减少数据点,我想获得一秒钟的平均速度,这样我一秒钟内只有一个数据点。我怎样才能在 Es 中实现这一点。

标签: elasticsearchelastic-stack

解决方案


考虑到您的映射看起来像 -

{
  "properties": {
    "ms": {
      "type": "integer"
    },
    "seconds": {
      "type": "integer"
    },
    "velocity": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": "256"
        }
      }
    }
  }
}

下面的嵌套聚合将起作用 - 您将在“averageMsInSecond”字段中获得数据点。

{
  "size": 0,
  "aggs": {
    "seconds_buckets": {
      "terms": {
        "field": "seconds"
      },
      "aggs": {
        "averageMsInSecond": {
          "avg": {
            "field": "ms"
          }
        }
      }
    }
  }
}

为了获得一秒钟的平均值,您需要读取 seconds_buckets aggs 中的键并将其与 averageMsInSecond 一起使用。

希望能帮助到你。


推荐阅读