在我们的项目中,我们使用NEST将数据插入ElasticSearch(1.7)。我们希望能够强制ES将所有日期截断为映射格式。
映射示例:
"dateFrom" : {
"type": "date",
"format": "dateHourMinute" // Or yyyy-MM-dd'T'HH:mm
}
数据示例:
{
"dateFrom" : 2015-12-21T15:55:00.000Z
}
插入此数据会抛出IllegalArgumentException:
格式无效:“2015-12-21T15:55:00.000Z”格式错误为“:00.000Z”
显然我们不需要约会的最后部分。我们不能将ES配置为截断它而不是错误输出吗?
请记住,我们现在正在使用1.7,因为日期格式化似乎在最近的版本中发生了变化......
答案 0 :(得分:1)
为了使数据正确索引,我可以将数据类型更改为date_optional_time
(1.7中支持)
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"date": {
"type": "date",
"format": "date_optional_time"
}
}
}
}
}
这将允许您在时间可选的情况下提供日期。
如:
PUT /my_index/my_type/1
{
"date": "2015-12-21"
}
或你拥有它
PUT /my_index/my_type/2
{
"date": "2015-12-21T15:55:00.000Z"
}
现在两者都是有效的提交。我不知道ES中的任何转换方法,以支持在索引时截断或转换字段数据。我想如果你想解析数据并删除提交前的时间,你需要在创建JSON对象时在ES之外做这个。
答案 1 :(得分:0)
ES似乎无法通过自定义映射编辑日期。在将它们插入ES之前,我们最终使用JsonConverters(如this)删除秒和毫秒。