ES遇到文档中未遇到的字段,会用dynamic mapping来确定字段的数据类型并自动把新的字段添加到类型映射。
通常我们不知道会添加什么新字段。但又希望这些字段被自动索引。如果ES是作为重要的数据存储,可能就会期望遇到新字段就会抛出异常,这样能及时发现问题。
dynamic配置来控制这种行为,可以接受的选项如下:
- true: 动态添加新的字段-缺省值
- false:忽略新字段
- strict:如果遇到新字段抛出异常
配置参数dynamic可以用在根object或任何object类型的字段上。你可以将dynamic的默认值为strict,而旨在指定的内部对象中开其他:
PUT /my_index{"mappings:" {"dynamic":"strict","properties": {"title": {"type": "text"},"stash": {"type":"object","dynamic":true,}}}}
如果遇到新字段,对象
my_type就会抛出异常。 内部对象stash遇到新字段会动态创建新字段
使用上述动态映射,你可以给stash对象添加新的可检索的字段:
PUT /my_index/_doc/1{"title": "This doc adds a new field","stash": { "new_field": "Success!" }}
但是对根节点对象 my_type 进行同样的操作会失败:
PUT /my_index/_doc/1{"title": "This throws a StrictDynamicMappingException","new_field": "Fail!"}
