场景3 绘制水泵注水的速度
小红都上高中了,学习了立体几何,老师又来作妖了,老师说了,小红,这个立方体的水塔底面积10平米,高50米,你用这个水泵给他注水,水泵注水的速度是会变的,你给我统计一下注水的速度。
小红说,这还不简单,我只要统计水塔增长的速度,然后除以水泵的横截面积就可以了,然后,按时间统计了水泵的高度,从2021/06/21 17:21:30s开始每隔10s统计依次,并写入到ElasticSearch中。
高度:high:83cm 范围从0-50000cm 时间date:2021-06-27T17:21:30
注:ES支持的日期格式可以查看文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html
如下,创建索引和设置属性。
添加一些数据然后查询数据:
保存数据:
{
"time":"2021-06-27T17:26:45",
"waterhigh":150
}
查询数据
{
"query":{
"match_all":{}
}
}
回显
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "water",
"_type": "_doc",
"_id": "nfrVTHoBxlfFgemdO-u3",
"_score": 1,
"_source": {
"time": "2021-06-27T17:21:30",
"waterhigh": 5
}
},
{
"_index": "water",
"_type": "_doc",
"_id": "nvrWTHoBxlfFgemdHOsa",
"_score": 1,
"_source": {
"time": "2021-06-27T17:22:30",
"waterhigh": 10
}
},
{
"_index": "water",
"_type": "_doc",
"_id": "n_rWTHoBxlfFgemdNOtN",
"_score": 1,
"_source": {
"time": "2021-06-27T17:25:30",
"waterhigh": 20
}
},
{
"_index": "water",
"_type": "_doc",
"_id": "oPrWTHoBxlfFgemdVeu8",
"_score": 1,
"_source": {
"time": "2021-06-27T17:26:30",
"waterhigh": 80
}
},
{
"_index": "water",
"_type": "_doc",
"_id": "ofrWTHoBxlfFgemdcuuA",
"_score": 1,
"_source": {
"time": "2021-06-27T17:26:34",
"waterhigh": 90
}
},
{
"_index": "water",
"_type": "_doc",
"_id": "ovrWTHoBxlfFgemdj-tn",
"_score": 1,
"_source": {
"time": "2021-06-27T17:26:37",
"waterhigh": 120
}
},
{
"_index": "water",
"_type": "_doc",
"_id": "o_rWTHoBxlfFgemdt-uS",
"_score": 1,
"_source": {
"time": "2021-06-27T17:26:45",
"waterhigh": 150
}
}
]
}
}
kibana中设置index,指定time后,在discovery查看,尴尬的发现没有发现数据。
设置时间检索范围,终于有数据了,但是我保存的命名是27号的数据呀,为啥会全显示28呢,
时间的对应关系如下,可以看到向后推迟了8个小时,其实这个就是UTC时间和本地时间搞的鬼了,本地时间为北京时间(UTC+8),而ElasticSearch保存的时间认为是UTC时间,即认为UTC的2021-06-27T17:21:30,到kibana显示的时候显示本地时间(北京时间),正好UTC+8了。
{
"_index": "water",
"_type": "_doc",
"_id": "nfrVTHoBxlfFgemdO-u3",
"_score": 1,
"_source": {
"time": "2021-06-27T17:21:30",
"waterhigh": 5
}
},
那么能否通过设置完善这个结果呢,最好的办法莫过于设置ElasticSearch中数据的时区了,很遗憾,么有找到对应的方法,那看看时间戳的方式是否也会有类似的问题呢?
很遗憾查询不出来,时间戳只能是ms的时间戳,如果是s的就又发生错误了。https://www.elastic.co/guide/en/elasticsearch/reference/7.13/search-aggregations-bucket-autodatehistogram-aggregation.html
可以看到使用时间戳是不会发生时间的偏移的,这是为什么呢,其实这是因为我使用工具转换的时间戳,默认UTC时间转换的时间戳了,如果是东八区的时间转换的时间戳是仍然会有时间便宜的。
查看大神的博客后,给出一个时区的总结,https://blog.csdn.net/qq_28988969/article/details/103498476
那么既然已经有数据了,让我们来做一个随时间展示的折线图吧。
很遗憾,Y轴选不到了,我们将Y轴设置成了text,字符串类型,需要设置成数字long
{
"properties":{
"waterhigh":{
"type":"long",
"index":true
},
"time":{
"type":"date",
"index":true
}
}
}