无法在elastisearch上定义日期类型索引

时间:2018-12-03 15:10:20

标签: date elasticsearch indexing

我有一个发送到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"

到目前为止很好,但是索引将我的created的类型设置为long,而不是date

  1. 从Kibana界面复制索引,将long更改为date,并为其创建新的数据库:

    {     “映射”:{         “ somedb2”:{             “属性”:{                 “创建”:{                     “ type”:“日期”,                     “格式”:“ 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上进行搜索基本上只涉及格式化部分,而没有太多关于配置或创建索引的内容。我需要一个用于Elasticsearch的插件来处理日期吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我知道了。

我执行的curl命令似乎在使用的dbname和映射器中使用的名称上有错误。 JSON上也有一个错误,这使得它很难理解。现在可以正常工作了。我也将format更改为epoch_millis,而不是x

现在它像一种魅力一样工作,并成为了我在Kibana的第一个仪表板。