elasticsearch range aggs timezone 实践

在使用elasticsearch做数据存储和搜索引擎时,不可避免的会涉及到一些时间类的数据,比如:数据生成时间。本文主要针对elasticsearch使用过程中时间类型数据的mapping、写入、查询以及聚合计算等,谈谈自己的理解和总结出的最佳实践。


  • Index/Type mapping
官方支持的时间类型,大致上分为两类:时间戳(支持毫秒)和日期字符串类型。考虑到可阅读性,这里我选择日期字符串类型(当然,不考虑成本的情况下,完全可以两者都使用)
  • 数据写入时的时区选择
elasticsearch中相关时区的操作往往以 UTC 时间(即:0时区时间)为准,为了和 elasticsearch 保持一致,在插入数据时,我们使用 UTC 时间戳。例如:2017-12-25T16:00:00Z
  • 数据筛选和聚合时的时区问题
基于上述和 elasticsearch 保持一致的 UTC 时间数据,做 range 筛选和 aggs 聚合时,考虑到数据分析脚本或者服务的本地化,我们往往使用 +08:00 的时间参数作为输入,如此在传递给elasticsearch时,由于时区不同,需要指定传入的实践参数为 +08:00 时区。

  • 实例
  • 构建 Index/Type Mapping
PUT http://127.0.0.1:9200/timezone
{
    "mappings": {
        "timezone-26.27": {
            "properties": {
                "@timestamp": {
                    "type": "date"
                },
                "timestring": {
                    "type": "keyword"
                }
            }
        }
    }
}
  • 插入模拟数据
POST http://127.0.0.1:9200/timezone/timezone-26.27/_bulk?pretty&refresh
{"index":{"_id":1}}
{"@timestamp":"2017-12-25T16:00:00Z","timestring":"2017-12-26 00:00:00"}
{"index":{"_id":2}}
{"@timestamp":"2017-12-25T16:59:59Z","timestring":"2017-12-26 00:59:59"}
{"index":{"_id":3}}
{"@timestamp":"2017-12-25T17:00:00Z","timestring":"2017-12-26 01:00:00"}
{"index":{"_id":4}}
{"@timestamp":"2017-12-25T17:59:59Z","timestring":"2017-12-26 01:59:59"}
{"index":{"_id":5}}
{"@timestamp":"2017-12-25T18:00:00Z","timestring":"2017-12-26 02:00:00"}
{"index":{"_id":6}}
{"@timestamp":"2017-12-25T18:59:59Z","timestring":"2017-12-26 02:59:59"}
{"index":{"_id":7}}
{"@timestamp":"2017-12-25T19:00:00Z","timestring":"2017-12-26 03:00:00"}
{"index":{"_id":8}}
{"@timestamp":"2017-12-25T19:59:59Z","timestring":"2017-12-26 03:59:59"}
{"index":{"_id":9}}
{"@timestamp":"2017-12-25T20:00:00Z","timestring":"2017-12-26 04:00:00"}
{"index":{"_id":10}}
{"@timestamp":"2017-12-25T20:59:59Z","timestring":"2017-12-26 04:59:59"}
{"index":{"_id":11}}
{"@timestamp":"2017-12-25T21:00:00Z","timestring":"2017-12-26 05:00:00"}
{"index":{"_id":12}}
{"@timestamp":"2017-12-25T21:59:59Z","timestring":"2017-12-26 05:59:59"}
{"index":{"_id":13}}
{"@timestamp":"2017-12-25T22:00:00Z","timestring":"2017-12-26 06:00:00"}
{"index":{"_id":14}}
{"@timestamp":"2017-12-25T22:59:59Z","timestring":"2017-12-26 06:59:59"}
{"index&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值