具有以下映射:
curl -X PUT 'localhost:9200/cambio_indice?pretty=true' -d '{ "mappings" : { "el_tipo" : { "properties" : { "name" : { "type" : "string" }, "age" : { "type" : "integer" }, "read" : { "type" : "integer" } }}}}'
如果我添加以下代码,即使它与映射不匹配(read丢失)也可以完美地工作,但ES不会抱怨。
read
curl -X PUT 'localhost:9200/cambio_indice/el_tipo/1?pretty=true' -d '{ "name" : "Eduardo Inda", "age" : 23 }'
如果我添加以下条目,它也可以工作。
curl -X PUT 'localhost:9200/cambio_indice/el_tipo/2?pretty=true' -d '{ "jose" : "stuff", "ramon" : 23, "garcia" : 1 }'
似乎该映射未对我添加的元素生效。尝试映射类型时我做错了什么?
这是Elasticsearch的默认行为,在大多数情况下是理想的。但是对于您的情况,如果您不想允许索引未在映射中定义的字段,则需要更新映射并将其"dynamic"属性设置为"strict"。基本上,您的映射定义应如下所示:
"dynamic"
"strict"
{ "mappings": { "el_tipo": { "dynamic": "strict", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "read": { "type": "integer" } } } } }
然后,如果您尝试为“ jose”,“ ramon”或“ garcia”之类的字段建立索引,Elasticsearch将抛出一条适当的消息,提示禁止动态添加这些字段。