You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动