当我包含小时和分钟时,Kibana 无法从 elasticsearch 中获取日期

Kibana fails to pick up date from elasticsearch when I include the hour and minute

我真的很努力将这个特定的时间格式导入到 elasticsearch 中,以便我可以在 Kibana 中绘制它。我无法更改此格式。我的 elasticsearch 数据和映射采用这种格式:

第 1 步:设置映射

PUT http://<>.com:5101/myindex6/_doc/1

{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "HH:mm yyyy-MM-dd"
      },
        "data": {
        "type":   "integer"
      }
    }
  }
}

步骤 2:添加数据

PUT http://<>.com:5101/myindex6

{
  "test" : [ {
    "data" : "119050300",
    "date" : "10:00 2019-06-03"
  } ]
}

在 Kibana 中,它找不到这个日期,也不允许我将其映射为一个日期。但是,如果我删除时间方面并使用日期,而是这样做,它工作正常:

数据

{
  "test" : [ {
    "data" : "119050300",
    "date" : "2019-06-03"
  } ]
}

地图

{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "yyyy-MM-dd"
      },
        "data": {
        "type":   "integer"
      }
    }
  }
}

谁能告诉我如何包含时间而不中断时间,这样我就可以在 kibana 中按时间进行过滤。

您正在索引的映射和结构文档之间存在差异。您正在使用的端点似乎也被交换了。按照以下步骤操作:

1。创建索引
PUT myindex6
{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "HH:mm yyyy-MM-dd"
      },
        "data": {
        "type":   "integer"
      }
    }
  }
}
2。索引文件
POST myindex6/_doc/1
{
  "data": "119050300",
  "date": "10:00 2019-06-03"
}

注意用于创建索引然后索引文档的端点。还要注意文档的结构与映射一致。在您的情况下,您正在使用 test 字段索引文档,该字段是具有字段 datadate 的对象数组。此结构与步骤 1 中创建的映射不匹配。

正如上述答案中所指出的,您索引的数据与创建的映射不匹配。您需要做的是使用嵌套的测试字段更新您的映射。

{
  "mappings": {
    "properties": {
        "test": {
            "type": "nested",
            "properties": {
                "date": {
                    "type": "date",
                    "format": "HH:mm yyyy-MM-dd"
                },
                "data": {
                    "type": "integer"
                }
            }
        }
    }
}}

然后 re-index 你的数据。之后日期字段将出现在 Kibana 中。

正如大家已经指出的,您的索引映射与您的数据不同,因此您需要更新映射。我强烈建议修改 Elasticsearch 的 index mapping guide 以更好地理解映射及其对索引数据的影响。

另外,我看到您仍在使用映射类型。如果您刚刚开始使用 ES 用例,最好避免使用它们,因为它们将被弃用并最终从 ES [source].

中删除

一切都很好,除了一件小事。在您的映射中,您将日期格式指定为 epoch_millis,但在您的文档中,日期时间在 epoch_second 中指定。

所以你有两个选择:

  1. 要么保持映射不变,然后将所有日期时间乘以 1000 倍
  2. 或者您使用 "format": "epoch_second" 更改映射并保持数据不变。

无论如何,之后您需要在 Kibana 中重新加载您的索引模式,它才会起作用。请注意,我在 Kibana 4.2 上对此进行了测试。

这就是我认为它会起作用的方式。

PUT http://<>.com:5101/myindex6/_doc/1

{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
        "data": {
        "type":   "integer"
      }
    }
  }
}
PUT http://<>.com:5101/myindex6

{
  "test" : [ {
    "data" : "119050300",
    "date" : "2019-06-03T10:00:00Z"
  } ]
}