我似乎不明白如何防止elasticsearch自动为新字段添加新映射。 documentation州
也可以通过设置索引模板为所有索引禁用自动类型创建:
PUT _template/template_all
{
"template": "*",
"order":0,
"settings": {
"index.mapper.dynamic": false
}
}
所以这就是我在做的事情:
client.admin().indices()
.preparePutTemplate("template_disable_dynamic_mapping")
.setTemplate("*")
.setSettings(Settings.builder().put("index.mapper.dynamic", false))
.get();
在使用data
的自定义映射创建索引后,我可以看到这些映射和设置,GET /data/_settings
返回:
{
"data": {
"mappings": {
"some_type": {
"properties": {
"value": {
"type": "text"
},
[...]
}
}
}
},
"settings": {
"index": {
"mapper": {
"dynamic": "false"
},
[...]
}
}
}
现在,如果我使用新字段foo
索引文档,它会成功插入,我的新映射如下所示:GET /data/_mapping
{
"data": {
"mappings": {
"some_type": {
"properties": {
"foo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "text"
},
[...]
}
}
}
}
}
我的期望是不会创建新的映射。