我有以下映射
@Document(indexName = "some-index")
@Data
public class ElasticDocument {
@Id
@Field(type = FieldType.Text)
private String id;
@Field(type = FieldType.Date, format = DateFormat.custom)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "uuuu-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime issuedTimestamp;
}以下存储库
@Repository
public interface DocumentRepository extends ElasticsearchRepository<ElasticDocument, String> {
}但是,spring数据弹性搜索4.0.3中的以下查询会引发一个转换错误:
Page<ElasticDocument> elasticDocuments = documentRepository.findAll(PageRequest.of(0, 10));MappingElasticsearchConverter.java:290Type LocalDateTime of property ElasticDocument.issuedTimestamp是一个TemporalAccessor类,但既没有定义日期类型的@Field注释,也没有注册的读取转换器!不能从Elasticsearch中的复杂对象映射它![没有发现能够从[org.springframework.core.convert.ConverterNotFoundException:类型转换为java.time.LocalDateTime类型的转换器]
我正在使用elasticsearch 7.9.1和spring data elasticsearch 4.0.3.RELEASE,根据我从spring data elasticsearch 4.x开始的理解,只要我在映射时添加了Field注释,我们就不需要创建自定义转换。
发布于 2020-09-16 08:12:58
您需要在@Field注释中添加自定义格式的模式。
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "uuuu-MM-dd'T'HH:mm:ss.SSS")发布于 2022-10-09 16:33:01
由于弹簧数据弹性版本4.2,dateformat.custom被废弃.您可以在date_hour_minute_second_xxx中使用任何一个枚举org.springframework.data.elasticsearch.annotations.DateFormat。E.g
@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second_millis)
private LocalDateTime createdDate;https://stackoverflow.com/questions/63915417
复制相似问题