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