首页 > 解决方案 > ElasticSearch 无法识别日期类型,显示为字符串类型

问题描述

弹性搜索版本:6.3

映射定义: ES_DOCTYPE = { "properties": { "UsageEndDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"}, "UsageStartDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"} } }

json数据:

{ 'UsageEndDate': '2018-08-01 02:00:00', 'UsageStartDate': '2018-08-01 01:00:00' } { 'UsageEndDate': '2018-08-02 02:00:00', 'UsageStartDate': '2018-08-02 01:00:00' }

创建索引: es.index(index="test", doc_type='test', body=ES_DOCTYPE)

发送数据: helpers.streaming_bulk(es, documents(), index="test", doc_type='test', chunk_size=1000)

嗨,我做了我的工作谷歌搜索,但也许关键字太笼统,所以我没有得到太多。

当我阅读文档时,ES 应该能够自动找到日期格式,但即使我添加了映射定义,那些UsageStartDateUsageEndDate仍然显示为string当我在 Kibana 中查看它们时。

有什么我想念的吗?

非常感谢你 :)

标签: elasticsearchindexingdate-format

解决方案


我自己想通了,

dynamicTemplate = { "properties": { "UsageEndDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"}, "UsageStartDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"} }, "dynamic_templates": [ { "notanalyzed": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "string", "index": "not_analyzed" } } } ] }

并先放映射定义,然后将数据发送到 ElasticSearch

es.indices.put_mapping(index="test", doc_type='test', body={'test': dynamicTemplate})

es.index(index='test-index', doc_type='tweet', body=ES_DOCTYPE)

推荐阅读