Spring-data-elasticsearch 4.4.18迁移后日期注解类型不匹配异常求助
问题解决:Spring Data Elasticsearch 4.x日期字段注解异常调整
异常原因
Spring Data Elasticsearch 4.x版本对@Field注解的format属性做了变更:3.x中该属性是单个DateFormat枚举值,4.x改为**DateFormat[]数组类型**,所以原写法format = DateFormat.basic_date会触发类型不匹配异常。
字段注解调整方案
将注解中的format值改为数组形式:
@Field(type = FieldType.Date, format = {DateFormat.basic_date}) private LocalDate promotionDateFrom;
查询代码说明
你的查询逻辑本身没问题,DateTimeFormatter.BASIC_ISO_DATE确实和DateFormat.basic_date的格式一致。不过可以优化为直接传入LocalDate对象,避免手动格式化字符串,Spring Data Elasticsearch会自动处理与Elasticsearch的格式适配:
LocalDate yesterday = LocalDate.now().minus(1, ChronoUnit.DAYS); campaignQueryBuilder.must().add(QueryBuilders.rangeQuery("productDateEnd").gte(yesterday));
额外注意点
- 确保Elasticsearch索引中该字段的映射类型为
date,且格式包含basic_date; - 如果是已有索引,修改注解后需要重新生成索引映射(或更新映射),否则旧的映射可能导致数据存储/查询异常。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

