elasticsearch - ElasticSearch 中的聚合操作
问题描述
我有一个问题陈述,其中我有 Es 中的车辆数据,字段时间以秒为单位,时间以毫秒为单位和速度。现在我想在前端获取数据并绘制速度与时间的关系图。但问题是有很多数据点,因为一秒钟有 30-40 毫秒的条目和相应的速度。现在为了减少数据点,我想获得一秒钟的平均速度,这样我一秒钟内只有一个数据点。我怎样才能在 Es 中实现这一点。
解决方案
考虑到您的映射看起来像 -
{
"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 一起使用。
希望能帮助到你。
推荐阅读
- lua - 如何从 Rust 的上下文中检索 lua 表?
- ansible - 如何使用回调插件“log_plays”并使用 ansible-playbook 同时保持标准输出屏幕输出?
- python - 如何修复 InterfaceError: 2003: Can't connect to MySQL server on '127.0.0.1:3306:3306' (11001 getaddrinfo failed)
- java - 是否有代码可以使第一个 JFrame 的元素快速呈现?
- php - Symfony 4 - 无法保存密钥...类型数组:触摸():Utime失败:不允许操作
- java - jOOQ - 将运行时映射与手动创建的字段一起使用
- selenium - 是否必须安装 chrome 才能在无头模式下使用 Selenium chrome 驱动程序?
- javascript - 如何处理 puppeteer-cluster[CONCURRENCY_BROWSER] 中的多个选项卡?
- java - 我在使用 JPA 从 mssql 从关系表中获取数据时遇到问题
- javascript - 测试套件无法运行语法错误:意外的标识符