美文网首页
ES mapping—date 字段的坑

ES mapping—date 字段的坑

作者: 顶宝麻麻 | 来源:发表于2020-04-12 16:38 被阅读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字段没什么用,就暂时不入库了。

    相关文章

      网友评论

          本文标题:ES mapping—date 字段的坑

          本文链接:https://www.haomeiwen.com/subject/ktmvmhtx.html