ES mapping—date 字段的坑

2020-04-12  本文已影响0人  顶宝麻麻

故事是这样开始~~~

发现数据从消息队列里能看到,但是并没有存入ES。
于是去查看ES日志,果真有报错,报错如下:

elasticsearch.index.mapper.MapperParsingException: failed to parse field [aaa] of type [date] in document with id '1'……

看到

failed to parse field [aaa] of type [date]

于是去es中查询查看test_20200409的mapping信息

GET test_20200409/test/_mapping

aaa的类型就是date

再查看前一天的索引mapping信息

GET test_20200408/test/_mapping

前一天aaa的类型就是text

然后查询了ES相关知识

Mapping,就是对索引库中索引的字段名称及其数据类型进行定义,类似于mysql中的表结构信息。不过es的mapping比数据库灵活很多,它可以动态识别字段。一般不需要指定mapping都可以,因为es会自动根据数据格式识别它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping。

然后用

GET _template 

查看索引模板里确实提前没有定义aaa的mapping

然后想着20200409哪个日志样本先有的aaa这个字段呢?

{
  "size": 0,
  "aggs": {
    "group_by_aaa": {
      "terms": {
        "field": "aaa"
      }
    }
  }
}

然后挨个查aaa这个值的详细数据,只有三种

{
 "query": {
   "bool": {
     "must": [
       {
         "term": {
           "aaa": 1511481600000
         }
       }
     ]
   }
 }
}

发现data_1的数据00:00:02入库的,其中aaa='2020-04-07'
然后发现


插入aaa.png
{
    "mappings":{
        "data":{
            "properties":{
                "aaa":{
                    "type":"date"
                }
            }
        }
    }
}

然后试着bbb='2020-04-12 00:00:00'


插入bbb.png
{
    "mappings":{
        "data":{
            "properties":{
                "aaa":{
                    "type":"date"
                },
                "bbb":{
                    "type":"text",
                    "fields":{
                        "keyword":{
                            "ignore_above":256,
                            "type":"keyword"
                        }
                    }
                }
            }
        }
    }
}

于是去官网查了一下


image.png

然后试了一下 ccc= '2020/04/12 00:00:00'

{
    "mappings":{
        "data":{
            "properties":{
                "aaa":{
                    "type":"date"
                },
                "ccc":{
                    "format":"yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis",
                    "type":"date"
                },
                "bbb":{
                    "type":"text",
                    "fields":{
                        "keyword":{
                            "ignore_above":256,
                            "type":"keyword"
                        }
                    }
                }
            }
        }
    }
}

最后反馈给开发,由于data_1的aaa字段没什么用,就暂时不入库了。

上一篇 下一篇

猜你喜欢

热点阅读