在 ElasticSearch 中以微秒格式保存日期
Saving date in microsecond format in ElasticSearch
我正在尝试使用带有 Logstash 的 jdbc 输入插件将 MySQL 数据库中的一组事件保存到弹性搜索中。数据库中的事件记录包含微秒格式的日期字段。实际上,数据库中有几微秒之间的记录。
导入数据时,Elasticsearch 将微秒日期格式截断为毫秒格式。如何以微秒格式保存数据? elasticsearch 文档说他们遵循 JODA 时间 API 来存储日期格式,它不支持微秒并通过在时间戳末尾添加 Z 来截断。
截断后的示例时间戳:2018-05-02T08:13:29.268Z
数据库中的原始时间戳:2018-05-02T08:13:29.268482
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"
}
旁注,"date" 数据类型在 elasticsearch 中以毫秒为单位存储数据,因此此处以防在日期范围查询中需要纳秒精度级别;合适的数据类型是 date_nanos
我正在尝试使用带有 Logstash 的 jdbc 输入插件将 MySQL 数据库中的一组事件保存到弹性搜索中。数据库中的事件记录包含微秒格式的日期字段。实际上,数据库中有几微秒之间的记录。
导入数据时,Elasticsearch 将微秒日期格式截断为毫秒格式。如何以微秒格式保存数据? elasticsearch 文档说他们遵循 JODA 时间 API 来存储日期格式,它不支持微秒并通过在时间戳末尾添加 Z 来截断。
截断后的示例时间戳:2018-05-02T08:13:29.268Z
数据库中的原始时间戳:2018-05-02T08:13:29.268482
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"
}
旁注,"date" 数据类型在 elasticsearch 中以毫秒为单位存储数据,因此此处以防在日期范围查询中需要纳秒精度级别;合适的数据类型是 date_nanos