繁体   English   中英

Java如何格式化要在弹性搜索中插入的日期

[英]Java how to format a date to insert in Elastic Search

我正在编写一个 Java 应用程序以在 Elastic Search 7.5.1 中插入数据。 创建索引时,属性设置如下:

"datetime":{
   "type":"date"            
}

现在插入日期时出现此错误:

org.elasticsearch.index.mapper.MapperParsingException: failed to parse field [datetime] of type [date] in document with id '195'. Preview of field's value: '2018-11-23 10:38:00'

我目前正在这样做:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String v = dateFormat.format(date);

检查工作索引我可以看到它的格式如下,例如: 2019-10-09T11:11:38.879-04:00

创建该格式的掩码是什么?

谢谢你的帮助

根据文档,您可以为字段“日期时间”指定多种日期格式。

上面错误消息中的日期时间2018-11-23 10:38:00需要用yyyy-MM-dd HH:mm:ss映射才能被索引。

请考虑设置时区,甚至更好地使用ISO 8601格式,因为 elastic 在内部将所有日期存储为 UTC。 如果您不提供时区,则您编制索引的日期时间将被假定为 UTC,但您的应用程序可能会在不同的时区中运行。 这可能会导致麻烦;)

回到解决方案。 为日期时间字段定义这样的映射:

PUT my_index
{
  "mappings": {
    "properties": {
      "datetime": {
        "type":   "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd'T'HH:mm:ss.SSSZ||epoch_millis"
      }
    }
  }
}

它会处理日期时间值,如

  • 2018-11-23 10:38:00 (您当前的格式)

  • 2001-07-04T12:08:56.235-0700 (ISO 8601)

  • 1095379198unix时间

如果您想了解有关 Java 中日期和时间处理的更多背景信息,请查看 旧,但金。

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM