- 什么是Mapping
es7.0版本以后一个索引下面只允许一个Type,就相当于关系型数据库里面只能有一张表,每个Type下面的文档就相当于每个表的记录,一个Mapping属于一个索引的type,Mapping的作用就相当于规定数据库中每张表的字段的类型,也就是规定文档的数据类型
- 文档的数据类型
- Dynamic Mapping
- 运行例子
可以看到es帮我们自定义了数据的类型
- Dynamic Mapping中dynamic有三种情况
在es中,Mapping一经设置就不允许修改的,因为 lucene实现的倒排索引生成后不允许修改,应该重新建立新的索引,然后做reindex操作。
但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:
true:默认值,表示允许选自动新增字段
false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
strict:严格模式,文档不能写入,报错
- 示例代码
就是说当你设置成false的时候,新增一个字段,数据是可以创建成功的,但是es索引不到
代码例子
#首先我们创建一个文档
PUT mapping_test/_doc/1
{
"name":"张三"
}
#查询mapping
GET mapping_test/_mapping
#将dynamic设置为false
PUT mapping_test/_mapping
{
"dynamic": false
}
#新增文档字段
PUT mapping_test/_doc/2
{
"age":"31"
}
#查询时会显示value等于0
POST mapping_test/_search
{
"query": {
"match": {
"age": "31"
}
}
}
当我们设置为strict的时候,在插入的时候会直接报错400