5

我正在尝试使用带有 Logstash 的 jdbc 输入插件将 MySQL 数据库中的一组事件保存到弹性搜索中。数据库中的事件记录包含微秒格式的日期字段。实际上,在微秒组之间的数据库中有记录。

在导入数据时,Elasticsearch 会将微秒日期格式截断为毫秒格式。如何以微秒格式保存数据?elasticsearch 文档说他们遵循 JODA 时间 API 来存储日期格式,该格式不支持微秒并通过在时间戳末尾添加Z来截断。

截断后的示例时间戳:2018-05-02T08:13:29.268Z

数据库中的原始时间戳:2018-05-02T08:13:29.268482

4

2 回答 2

10

Z不是截断的结果,而是 GMT 时区。

ES 也支持微秒,前提是您在映射中指定了正确的日期格式。

如果您的映射中的日期字段是这样指定的:

    "date": {
      "type": "date",
      "format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
    }

然后,您可以使用数据库中的精确微秒精度来索引您的日期

更新

这是一个完整的重新创建,向您展示它的工作原理:

PUT myindex
{
  "mappings": {
    "doc": {
      "properties": {
        "date": {
          "type": "date",
          "format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
        }
      }
    }
  }
}

PUT myindex/doc/1
{
  "date": "2018-05-02T08:13:29.268482"
}
于 2018-05-02T08:42:03.213 回答
2

旁注,“日期”数据类型在弹性搜索中以毫秒为单位存储数据,因此如果在日期范围查询中需要纳秒精度级别;适当的数据类型是date_nanos

于 2019-06-21T09:27:34.853 回答