关闭ES动态创建mapping

时间:2022-09-12 19:16:21

使用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