1

尝试为dateES 7.6 中的字段指定格式(在索引映射中)。不接受以下任何一项:

        "createdAt" : {
          "type" : "date",
          "format": "yyyy-MM-dd'''T'''HH:mm:ss.SSSZZ"
        },
        "createdAt" : {
          "type" : "date",
          "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
        },

错误总是一样的:

“type”:“illegal_argument_exception”,“reason”:“无效格式:[yyyy-MM-ddTHH:mm:ss.SSSZZ]:未知模式字母:T”,

这是重现的完整示例:

curl -X DELETE "localhost:9200/example?pretty"
curl -X PUT   "localhost:9200/example/_mappings?pretty" -H 'Content-Type: application/json' -d' {
      "dynamic": false,
      "properties" : {
        "name" : {
          "type" : "text"
        },
        "createdAt" : {
          "type" : "date",
          "format" : "yyyyMMdd'T'HHmmss.SSSZ"
        }
      }
}'
4

1 回答 1

2

您可以在https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html上查看各种支持的日期格式:

您的日期格式的正确格式如下

"format" : "yyyyMMdd'T'HHmmss.SSSZ"(没有-在 yyyyMMdd 之间)

我刚刚创建了一个具有以下格式的索引,以便您自己尝试:

{
  "mappings": {
    "properties": {
      "date": {
        "type": "date" ,
        "format" : "yyyyMMdd'T'HHmmss.SSSZ" --> notice there is no `-` in yyyyymmdd
      }
    }
  }
}

编辑:-根据 OP 的最新更新,他正在使用curl命令创建索引,因此他需要转义日期T字段中存在的撇号('')。

正确的curl命令如下:

curl -X PUT "localhost:9500/example/_mappings?pretty" -H 'Content-Type: application/json' -d' {
      "dynamic": false,
      "properties" : {
        "name" : {
          "type" : "text"
        },
        "createdAt" : {
          "type" : "date",
          "format" : "yyyyMMdd'\''T'\''HHmmss.SSSZ" --> notice escape `T`
        }
      }
}'

这在 curl 中给出了正确的输出:

{
  "acknowledged" : true
}
于 2020-03-05T13:24:42.330 回答