本文我们介绍ES的Dynamic Mapping(动态mapping)
-
es可以自动识别文档字段类型,从而降低用户的使用成本,如下图所示:
- es对字段类型的自动识别是依靠JSON文档的字段类型来实现自动识别字段的类型,支持类型如下:
JSON类型 | es类型 |
---|---|
null | 忽略 |
boolean | boolean |
浮点类型 | float |
整数 | long |
object | object |
array | 由第一个非null值类型决定 |
string | 1.匹配为日期则设为date类型(默认开启)2.匹配为数字的话设为float或long类型(默认关闭),以上两种不满足最后会设为text类型,并附带keyword的子字段 |
-
日期的自动识别可以自行配置日期格式的,以满足各种需求
-
字符串是数字时,默认是不会自动识别为整型,因为字符串中出现数字是完全合理的
- numeric_detection可以开启字符串中数字的自定识别,如下图所示:
-
Dynamic Templates(动态模板),允许根据es自动识别的数据类型、字段名等来动态设定
API如下
- 所有字符串类型都设定为keyword类型,即默认不分词,哪些字段需要分词我们再单独设置
- 所有以message开头的字段都设定为text类型,即分词
- 所有以long_开头的字段都设定为long类型
- 所有自动匹配为double类型的都设定为float类型,可以节省空间
匹配规则一般又如下几个参数:
- match_mapping_type匹配es自动识别的字段类型,如boolean,long,string等
- match,unmatch 匹配字段名
- path_match,path_unmatch 匹配路径
将字符串默认使用keyword类型(es默认会为字符串设置为text类型,并增加一个keyword的子字段),设置如下: - 自定义Mapping的操作步骤如下:
1. 写入一条文档到es临时索引中,获取es自动生成的mapping
2. 修改步骤1得到的mapping,自定义相关配置
3.使用步骤2的mapping创建实际所需的索引