一,dynamic mapping
dynamic mapping有两层意思:
1,当索引没有被创建时,保存文档会自动创建索引,同时根据文档各字段值推断字段类型,这称之为dynamic mapping。
2,索引创建后,如果要新加字段,分为几种情况。
PUT lcy_test/_mapping
{
"dynamic":"strict"
}
如果mapping的danamic属性为false,可以创建文档,但新增字段不能被索引,mapping不会更新;
如果mapping的danamic属性为true,可以创建文档,新增字段能被索引,mapping会更新;
如果mapping的danamic属性为strict,创建文档包括新增字段,会报错;
二,指定mapping
// copy_to、不索引、数组
PUT lcy_test2
{
"mappings": {
"properties": {
"firstname":{
"type":"text",
"copy_to": "fullname"
},
"lastname":{
"type":"text",
"copy_to": "fullname"
},
"mobile":{
"type":"text",
"index": false
}
}
}
}
插入一条文档
POST lcy_test2/_doc
{
"firstname":"lu",
"lastname":"chu",
"mobile":1323
}
用虚拟字段查询
GET lcy_test2/_search?q=fullname:(lu chu)
存放数组。
// es没有专门的数组类型,但是任何类型都可以存放数组
POST lcy_test2/_doc
{
"firstname":"lu",
"lastname":["chu","yong"],
"mobile":1323
}
三,index template 和dynamic template
index template指的是预先设定一些索引规则,包括settings和mapping,创建索引时如果匹配了这个template,会按照这个模板创建索引。index template的创建不依赖与某个具体的索引。
dynamic template 的创建依赖于某具体的索引,可以针对字段类型提前做设置,以按照预期创建索引:比如对于整数,由于es无法区分是int还是long,如果不特别指定,会将所有的整数自动定位long类型,用dynamic template,我们可以指定满足某些条件的字段自动定位integer而不是long。
四,细节
1,“null_value”:“NULL”
2, copy_to
3, “index”:“false”,设置字段不索引