关闭ES动态创建mapping

时间:2021-06-03 12:44:08

使用ES的默认配置会使我们在索引不存在于mapping中的字段时,会自动创建。

这无疑会给我们带来困扰。

在我们不想要某个字段被搜索的时候,我们可以在开始关闭动态创建mapping。

执行如下操作:

PUT /test_xzy/_mapping/data
{
"dynamic":false
}

然后查看mapping:

GET /test_xzy/_mappings/data

得到:

{
"test_xzy": {
"mappings": {
"data": {
"dynamic": "false",
"properties": {
"age": {
"type": "long"
},
"hate": {
"type": "string"
},
"like": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
}
}

这样一来,在不存在于mapping中的字段在被索引之后不会存在于mapping中,这样的字段也不能被用来搜索。

我们更严格一点可以设置不在mapping中的字段的数据不能写入ES:

PUT /test_xzy/_mapping/data
{
"dynamic":"strict"
}

这样我们之后写入非”name,age,like,hate“的其他字段数据时会得到如下错误:

mapping set to strict, dynamic introduction of [hatae] within [data] is not allowed