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!"
}