6.dynamic 动态映射新字段的类型
检测新字段并将其添加到映射中的详细信息。
Elasticsearch默认是可以直接新增数据时,自动生成mapping映射,是因为默认设置dynamic属性为true。
动态设置控制是否可以动态添加新字段。它接受三种设置:
1.true 新检测到的字段被添加到映射中。(默认)
2.false 新检测到的字段将被忽略。这些字段将不会被索引,因此无法搜索,但仍会出现在返回的点击的_source字段中。这些字段不会添加到映射中,必须显式添加新字段。
3.strict如果检测到新字段,将引发异常并拒绝文档。必须将新字段显式添加
示例
DELETE my-index-000001
#1.自动映射了类型
PUT my-index-000001/_doc/1
{
"username": "johnsmith",
"name": {
"first": "John",
"last": "Smith"
}
}
## 结果:username-text name-object,first-text last-text
GET my-index-000001/_mapping
##2.在增加其他字段,依然能动态映射
PUT my-index-000001/_doc/2
{
"username": "marywhite",
"email": "mary@white.com",
"name": {
"first": "Mary",
"middle": "Alice",
"last": "White"
}
}
## 结果:新增字段的类型依然能显示
GET my-index-000001/_mapping
##3.dynamic mapping,推断字段的类型也会经常有不准确的时候,所以在最好是能自己定义
## uid--text
## isVip -- Boolean
## isAdmin -- text 期望是Boolean
## age -- long 期望是integer
## heigh -- long 期望是integer
PUT my-index-000001/_doc/2
{
"uid" : "123",
"isVip" : false,
"isAdmin": "true",
"age":19,
"heigh":180
}
## 查询字段映射的类型
GET my-index-000001/_mapping
DELETE my-index-000001
##4.动态映射(dynamic:true)(默认)
PUT my-index-000001
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"age": {
"type": "keyword"
}
}
}
}
##新增测试数据
PUT my-index-000001/_doc/1
{
"name": "vincent",
"age": "20",
"gender": "man"
}
GET my-index-000001/_mapping
##5.静态映射(dynamic:false)
DELETE my-index-000001
PUT my-index-000001
{
"mappings": {
"dynamic": "false",
"properties": {
"name": {
"type": "keyword"
},
"age": {
"type": "keyword"
}
}
}
}
##在dynamic=false的情况下。没有在mapping定义的gender是无法增加,但是不报错
PUT my-index-000001/_doc/1
{
"name": "vincent",