ElasticSearch Mapping:是否可以自动截断日期以适应其格式?

时间:2015-12-22 15:13:46

标签: elasticsearch nest elasticsearch-net

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

2 个答案:

答案 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)删除秒和毫秒。