https://www.elastic.co/guide/cn/elasticsearch/guide/current/dynamic-mapping.html#dynamic-mapping
当 Elasticsearch 遇到文档中以前 未遇到的字段,它用 dynamic mapping 来确定字段的数据类型并自动把新的字段添加到类型映射。有时这是想要的行为有时又不希望这样。通常没有人知道以后会有什么新字段加到文档,但是又希望这些字段被自动的索引。也许你只想忽略它们。如果Elasticsearch是作为重要的数据存储,可能就会期望遇到新字段就会抛出异常,这样能及时发现问题。幸运的是可以用 dynamic 配置来控制这种行为 ,可接受的选项如下:true 动态添加新的字段--缺省false 忽略新的字段,不会添加字段映射,但是会存在于_source中strict 如果遇到新字段抛出异常配置参数 dynamic 可以用在根 object 或任何 object 类型的字段上。你可以将 dynamic 的默认值设置为 strict , 而只在指定的内部对象中开启它, 例如:PUT /my_index{ "mappings": { "my_type": { "dynamic": "strict", "properties": { "title": { "type": "string"}, "stash": { "type": "object", "dynamic": true } } } }}
PUT /my_index/my_type/1{ "title": "This doc adds a new field", "stash": { "new_field": "Success!" }}
但是对根节点对象 my_type 进行同样的操作会失败:
PUT /my_index/my_type/1{ "title": "This throws a StrictDynamicMappingException", "new_field": "Fail!"}
把 dynamic 设置为 false 一点儿也不会改变 _source 的字段内容。 _source 仍然包含被索引的整个JSON文档。只是新的字段不会被加到映射中也不可搜索。
缺省映射
通常,一个索引中的所有类型共享相同的字段和设置。 _default_ 映射更加方便地指定通用设置,而不是每次创建新类型时都要重复设置。 _default_ 映射是新类型的模板。在设置 _default_ 映射之后创建的所有类型都将应用这些缺省的设置,除非类型在自己的映射中明确覆盖这些设置。例如,我们可以使用 _default_ 映射为所有的类型禁用 _all 字段, 而只在 blog 类型启用:PUT /my_index{ "mappings": { "_default_": { "_all": { "enabled": false } }, "blog": { "_all": { "enabled": true } } }}