0

在我们的项目中,我们使用 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,因为日期格式似乎在最近的版本中发生了变化......

4

2 回答 2

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 之外执行此操作。

于 2015-12-22T16:00:18.593 回答
0

看来 ES 目前无法通过自定义映射编辑日期。我们最终使用 JsonConverters(像这样)在将秒和毫秒插入 ES 之前删除它们。

于 2016-01-07T14:04:19.407 回答