首页 > 解决方案 > 无法在 elastisearch 上定义日期类型索引

问题描述

我有一个文件发送到 elasticsearch,看起来像这样:

{
    "created": 1543247749419,
    "name": "something",
    "person": {
        "created": 1543247012491,
        ...
    }
}

这两个created字段都是epoch_millis日期格式(以毫秒为单位的时间戳)。我基本上尝试了三件事:

  1. 像这样使用 curl 添加文档:

curl -H "Content-Type: application/json" -X POST "http://ipaddress:9200/somedb" -d "@/some/path"

到目前为止一切顺利,但索引将 my 的类型设置createdlong,而不是date

  1. 从 Kibana 界面复制索引,更改longfordate并为其创建一个新数据库:

    {“映射”:{“somedb2”:{“属性”:{“创建”:{“类型”:“日期”,“格式”:“x”},

并像这样发送数据:

curl -H "Content-Type: application/json" -X POST "http://ipaddress:9200/somedb2" -d "@/some/path"

然后我从elasticsearch收到了这个错误信息

 { "error": {
      "root_cause": [
           {
               "type": "mapper_parsing_exception",
               "reason":"Root mapping definition has unsupported parameters:  [mapping : {properties={created={type=date, format=x}, 

现在我真的不知道该怎么办。在 interwebz 上搜索基本上只讨论格式化部分,而没有太多关于配置或创建索引的内容。我需要一个弹性搜索插件来处理日期吗?

标签: dateelasticsearchindexing

解决方案


JSON(这是 ElasticSearch 的数据格式)没有明确的日期格式,它们始终被视为字符串,即使以其他方式传递也是如此。

因此,实际上,如果您未指定日期格式,则会考虑此选项:“strict_date_optional_time||epoch_millis”,即 epoch millis - 在您的情况下也是正确的。

这就是为什么每个人都在谈论格式化而不是转换;)


推荐阅读