【发布时间】:2020-12-24 02:25:39
【问题描述】:
我制作了一个 Elasticsearch(版本 7.8.1)文档,其中包含以下映射:
{
"transaction": {
"mappings": {
"properties": {
"_class": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"settlementEntries": {
"type": "nested",
"properties": {
"settlementDate": {
"type" : "date",
"format" : "uuuu-MM-dd"
},
"settlementId": {
"type": "long"
}
}
},
"transactionId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
我使用格式 yyyy-MM-dd 来存储结算日期。当我使用 curl 进行查询时,我可以使用 CURL -X GET localhost:9200/transaction/_search 查看数据。但是,当我尝试通过 springboot 执行相同操作时,它会引发错误。我的实体是:
public class TransactionBo {
@Id
private String transactionId;
@Field(type = FieldType.Nested)
private SettlementEntryBo settlementEntries;
}
和
public class SettlementEntryBo {
@Id
private Long settlementId;
@Nullable
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "uuuu-MM-dd")
private Date settlementDate;
}
据我所知,问题在于这里的映射:
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "uuuu-MM-dd")
private Date settlementDate;
[错误片段]:
2020-09-05 02:51:18.105 错误 10080 --- [nio-8090-exec-4] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet]在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 java.time.DateTimeException: Unable to get Instant from TemporalAccessor: {},ISO 解析为 java.time.format.Parsed 类型的 2016-01-01],根本原因
java.time.temporal.UnsupportedTemporalTypeException:不支持的字段:InstantSeconds
【问题讨论】:
-
使用
LocalDate代替Date是否可行?Date无论如何都不代表日期。
标签: java spring-boot elasticsearch spring-data-elasticsearch elasticsearch-dsl