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