什么是mapping
mapping类似于数据库的schema,表结构,主要作用如下:
- 定义索引中字段的名称
- 字段的数据类型
- 倒排索引相关的配置
mapping会把es中的json文档映射成lucene所需要的扁平格式。
字段类型
-
简单类型
- Text / Keyword
- Date
- Integer / Floating
- Boolean
- IPv4 / IPv6
-
复杂类型
- 对象类型、嵌套类型
-
特殊类型
- 地理信息类型
什么是dynamic mapping
在创建索引文档的时候,es会根据文档信息推算出字段的类似(有时候不一定对)。dynamic mapping机制使得我们无需手动定义mapping。
查看mapping:
// create user_info
post user_info/_doc
{
"name":"asd",
"birthday":"2020-11-23",
"address":"china"
}
//get mapping
get /user_info/_mappings
返回mapping如下:
{
"user_info" : {
"mappings" : {
"properties" : {
"address" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"birthday" : {
"type" : "date"
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
dynamic字段设置
通过dynamic参数来控制字段的新增:
- true(默认)文档可以正常写入,新增字段可索引
- false 文档可以正常写入,但无法对新增字段索引(字段不能被用来搜索)
- strict 文档不能写入,报错
设置脚本:
PUT user_info/_mapping
{
"dynamic":"true"
}
显式Mapping设置
示例脚本
PUT new_user
{
"mappings": {
"properties": {
"firstName":
{
"type": "text"
},
"lastName":
{
"type": "text"
},
"birth":
{
"type": "date",
"index": false
}
}
}
}