ElasticSearch中的聚合操作

时间:2019-02-05 05:01:22

标签: elasticsearch elastic-stack

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

1 个答案:

答案 0 :(得分:1)

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

{
  "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一起使用。

希望有帮助。