【发布时间】:2017-12-14 18:57:16
【问题描述】:
我正在尝试在 elasticsearch 中为包含时区日期的数据建立索引。
我的日期映射是:
"date": {
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
}
我使用以下代码来索引数据:
client.prepareIndex(INDEX, TYPE, id))
.setSource(gson.toJson(object), XContentType.JSON)
.setRefreshPolicy(RefreshPolicy.IMMEDIATE)
.get();
我创建了自己的 ZonedDateTime 适配器,如下所示:
public class ZonedDateTimeAdapter implements JsonSerializer<ZonedDateTime> {
public JsonElement serialize(ZonedDateTime date, Type typeOfSrc, JsonSerializationContext context) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
return new JsonPrimitive(date.format(formatter));
}
}
生成的日期类似于2005-01-01T13:35:50.596-0500。对我来说,这似乎与我的yyyy-MM-dd'T'HH:mm:ss.SSSZ 格式相匹配。但是我收到一条错误消息:
线程“main”中的异常 MapperParsingException[解析失败 [开始日期]];嵌套:IllegalArgumentException [无效格式: “2005-01-01T13:35:50.596-0500”在“.596-0500”处格式不正确]
有趣的是,如果我将 ZonedDateTimeAdapter 中的格式更改为 yyyy-MM-dd'T'HH:mm:ss.000Z(强制第二个分数始终为 000),我会得到类似 2005-01-01T13:31:06.000-0500 的结果日期。具有此日期的对象已成功索引到 elasticsearch。
你知道为什么2005-01-01T13:31:06.000-0500 索引成功但2005-01-01T13:35:50.596-0500 没有吗?这些不是一样的格式吗?
【问题讨论】:
标签: java elasticsearch gson datetime-format datetime-parsing