mapping——参数——dynamic
dynamic 属性
解释了如何检测新字段并将其添加到映射中的详细信息。
Elasticsearch默认是可以直接新增数据时,自动生成mapping映射,就是因为默认设置dynamic属性为true。
动态设置控制是否可以动态添加新字段。它接受三种设置:
true 新检测到的字段被添加到映射中。(默认)
false 新检测到的字段将被忽略。这些字段将不会被索引,因此无法搜索,但仍会出现在返回的点击的_source字段中。这些字段不会添加到映射中,必须显式添加新字段。
strict
如果检测到新字段,将引发异常并拒绝文档。必须将新字段显式添加
dynamic参数 配置的位置:mapping级别设置,或 在内部对象上设置
PUT bb { "mappings": { "_doc":{ "properties":{ "name":{ "type":"text", "dynamic":false }, "add":{ "type":"text" } } } } } 放到字段中,报错 Mapping definition for [name] has unsupported parameters: [dynamic : false]
1 PUT bb 2 { 3 "mappings": { 4 "_doc":{ 5 "dynamic":false, 6 "properties":{ 7 "name":{ 8 "type":"text" 9 }, 10 "add":{ 11 "type":"text" 12 } 13 } 14 } 15 } 16 } 17 18 GET bb/_mapping 19 20 { 21 "bb": { 22 "mappings": { 23 "_doc": { 24 "dynamic": "false", 25 "properties": { 26 "add": { 27 "type": "text" 28 }, 29 "name": { 30 "type": "text" 31 } 32 } 33 } 34 } 35 } 36 }
#插入一条记录,新增了一个新的字段 插入成功!
PUT bb/_doc/1 { "name":"aa", "add":"北京", "id":1 } #查询新增数据 GET bb/_search { "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ { "_index": "bb", "_type": "_doc", "_id": "1", "_score": 1, "_source": { "name": "aa", "add": "北京", "id": 1 } } ] } } #可以看到新增的数据包含 id字段的 GET bb/_search { "query": { "match": { "id": 1 } } } #通过筛选 id 字段,进行查询,无法查到数据 { "took": 79, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 0, "max_score": null, "hits": [] } }
1 GET bb/_mapping 2 #查询索引的映射,也不包含 新增的id字段 3 { 4 "bb": { 5 "mappings": { 6 "_doc": { 7 "dynamic": "false", 8 "properties": { 9 "add": { 10 "type": "text" 11 }, 12 "name": { 13 "type": "text" 14 } 15 } 16 } 17 } 18 } 19 }