我正在使用Spring Data支持Elasticsearch。以下是时间戳字段映射:
@Field(type = FieldType.Date, index = FieldIndex.not_analyzed, store = true,
format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
private LocalDateTime timestamp;
这导致Elasticsearch中字段的映射如下:
"timestamp":{"type":"date","store":true,"format":"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"}
当我使用java.util.Date时,一切正常。但是,当我切换到java.time.LocalDateTime时,发送到Elasticsearch的文档会导致异常。以下是文档(时间戳字段仅为简洁起见):
"timestamp": {
"hour":7, "minute":56, "second":9, "nano":147000000, "year":2017, "month":"FEBRUARY",
"dayOfMonth":13, "dayOfWeek":"MONDAY", "dayOfYear":44, "monthValue":2, "chronology": {
"id":"ISO", "calendarType": "iso8601"
}
}
例外情况是:
MapperParsingException[failed to parse [timestamp]]; nested: IllegalArgumentException[unknown property [hour]];
(...)
Caused by: java.lang.IllegalArgumentException: unknown property [hour]
看起来在对文档进行 jsonization 时,此处忽略了该模式。有什么可能的提示吗?或者,也许您可能知道如何将“内置”_timestamp字段与 Spring 数据一起使用?
我遇到了类似的问题:日期值中的“Z”被视为字符,因此日期解析失败。我的解决方案是使用自定义模式来确保转换正确:
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'")
private LocalDateTime dateField;
如果我们不想一次又一次地在不同的字段上重复模式,我们可以尝试集中到转换逻辑。Spring Data弹性搜索提供自定义转换功能,请在此处查看示例。
基本上,我们可以编写一个从字符串到LocalDateTime的转换器,并将日期模式放在那里。
选中https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper将JavaTimeMoules
添加到您的ObjectMapper
。
@Configuration
public class ElasticSearchConfiguration {
@Bean
public ElasticsearchTemplate elasticsearchTemplate(Client client) {
return new ElasticsearchTemplate(client, new CustomEntityMapper());
}
public static class CustomEntityMapper implements EntityMapper {
private final ObjectMapper objectMapper;
public CustomEntityMapper() {
objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
objectMapper.registerModule(new CustomGeoModule());
objectMapper.registerModule(new JavaTimeModule());
}
@Override
public String mapToString(Object object) throws IOException {
return objectMapper.writeValueAsString(object);
}
@Override
public <T> T mapToObject(String source, Class<T> clazz) throws IOException {
return objectMapper.readValue(source, clazz);
}
}
}
问题内容: 我正在使用Spring Data对Elasticsearch的支持。这是时间戳字段映射: 这导致Elasticsearch中的字段映射如下: 当我使用java.util.Date时,一切正常。但是,当我如上所述切换到java.time.LocalDateTime时,发送到Elasticsearch的文档导致异常。这是文档(为简洁起见,时间戳字段): 和例外: 似乎在对文档进行json转
我的pom。xml如下所示 我已经尝试了三天,使用REdhat入门指南让这个简单的示例代码与Infinispan一起使用,并下载了快速入门zip来运行它,但仍然不起作用!我一直收到Spring JMS的错误“无法连接到foo: 11222”或“池未打开”,然后是关于混合Uber和Jars版本的警告。我开始使用ehcache,这很难实现,因为只有有限的简单示例展示了如何从rest调用等中存储、检索和
我最近安装了privacy vpn,结果发现启用的openvpn会破坏Docker。 当我尝试运行时,我得到以下错误 禁用vpn可以解决这个问题(不过,我宁愿不禁用它)。有没有办法使这两者和平共处?我使用debian jessie,我的openvpn有以下版本字符串 null
所以我尝试在magnolia中制作一些页面,以便它们在phoneGap中工作,phoneGap是一个包装器,包装HTML5/CSS/JavaScript,并将其部署为移动应用程序。 Magnolia的问题是,它使用诸如jtl或jsp之类的servlet,而as phoneGap只接受这些servlet。html页面,不呈现jtl或jsp页面。 那么,我该如何只制作HTML5页面呢? 如有任何想法/
问题内容: 继续我提出的问题,我试图在我的代码库中使用ThreadPoolExecutor。即使反复尝试从Java API文档中理解,我也无法清楚地理解keepAliveTime要在构造函数中传递的参数的功能/目的。希望有人可以通过一些很好的例子向我解释。 Java文档摘录: keepAliveTime-当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间。 问题答案: 假设您