es-字段类型和建索引规范

建索引规范

索引名长度不超过32个字符,不要以 -(中划线),_(下划线),+(加号) 开头,7.0之后类型(type)统一为_doc,不再需要指定

  • 不要含有  /  *  ?  "  <  >  |   空格,逗号,冒号,简言之,不要包含标点符号

  • 不要以点号开头,点号开头的索引是es内置的
  • 不能包含大写字母,否则创建索引的时候会报异常(Invalid index name [XXX], must be lowercase)
  • 建议以小写字母开头,根据业务用下划线或中划线连接单词和数字,可以包含数字,如log_2022_01
  • 注意分片(number_of_shards)一旦指定后不可修改,副本数默认是1,建议,2,不超过3
  • 尽量使用索引别名代替索引,应对索引重建和维护问题

字段名:

字符长度也不要超过32位,不要以下划线开头,下划线开头的一般是es内置的字段(元数据字段)

大小写敏感,官方对字段名没有特别的规范要求,对java程序员来讲,字段名可以驼峰可以下划线,前者遵循java变量命名规范,后者遵循mysql建表规范即可

字段类型

以下为主要的数据类型,特殊的或者比较冷门的不予关注:

类型分类 子分类 具体类型
核心类型 字符串 text,keyword
整数 byte,short,integer,long
浮点 double,float,half_float,scale_float
逻辑 boolean
日期 date
范围 range
二进制 binary
复合类型 数组 array
对象 object
嵌套 nested

 注意:elasticsearch默认会自动识别date类型,如果想关闭该功能,修改mapping的设置'date_detection' => false即可 

date类型字段问题

format属性官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html#date-params

自定义时间格式属性:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html

date类型的默认格式为:"strict_date_optional_time||epoch_millis" (yyyy-MM-dd'T'HH:mm:ss.SSSZ 或 yyyy-MM-dd 或 1618321898)

时区问题:最佳实践为写入前就指定好时区(2022-01-01T12:58:17.136+08:00或timezone=GMT+8),不要查出来后在服务端转或在前端转

写入前如果不指定时区,es默认按照UTC 0时区,时间相差8小时

再明确记录下:不指定date类型的格式的话,默认是不支持 yyyy-MM-dd HH:mm:ss格式的

PUT index_name
{
    "mappings": {
        "_doc": {
            "properties": {
                "create_time": {
                      "type": "date",
                      "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
                  }
             }
        }
    }
}  
posted @ 2019-12-12 17:34  鼠标的博客  阅读(1927)  评论(0编辑  收藏  举报