Elasticsearch/Kibana Epoch时间戳索引后日期显示错误求助
解决Elasticsearch中Epoch秒级时间戳索引后日期显示错误的问题
这个问题我之前也碰到过,核心原因是Elasticsearch对数字类型时间戳的默认解析规则和你使用的秒级时间戳不匹配:Elasticsearch的date类型在解析数字形式的时间戳时,默认会把数字当成毫秒级Epoch时间戳处理,但你提供的1495956650是秒级时间戳(10位数字),所以被错误解析成了1970年1月左右的日期(1495956650毫秒≈17.3天,刚好对应1970年1月18日)。
下面给你两种可行的解决方案:
方案一:修改索引映射,指定秒级时间戳格式
直接在date.value的映射里添加format参数,明确告诉Elasticsearch这是秒级时间戳:
PUT test { "mappings": { "doc": { "properties": { "date": { "properties": { "value": { "type": "date", "format": "epoch_second" # 关键:指定解析秒级Epoch时间戳 } } } } } } }
修改完映射后,重新提交你原来的秒级时间戳数据,Elasticsearch就能正确解析成2017年5月28日的日期了。
方案二:转换时间戳格式再提交
如果不想修改现有索引的映射,你可以在提交数据前把秒级时间戳转换成毫秒级(乘以1000),或者直接转成ISO标准的日期字符串:
- 提交毫秒级时间戳(数字类型):
POST test/doc {"date": { "value": 1495956650000 } }
- 提交ISO格式字符串:
POST test/doc {"date": { "value": "2017-05-28T07:30:50Z" } }
这两种方式都能让Elasticsearch正确识别日期,在Kibana中显示正常。
内容的提问来源于stack exchange,提问作者meh




