具有以下映射:
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并不抱怨。
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
}'
似乎映射没有对我添加的元素生效。当我尝试映射我的类型时,我做错了什么?
答案 0 :(得分:2)
这是Elasticsearch的默认行为,在大多数情况下都是可取的。但是对于您的情况,如果您不希望允许对映射中未定义的字段建立索引,则需要更新映射并将其for ( var i = hidden.length - 1; i > -1; i-- ) {
hidden[ i ].className = '';
}
属性设置为i
。基本上,您的映射定义应如下所示:
hidden[0]
然后,如果您尝试索引像“jose”,“ramon”或“garcia”这样的字段,Elasticsearch会抛出适当的消息,说明禁止动态添加这些字段。
答案 1 :(得分:0)
根据ES的文件:
默认情况下,Elasticsearch在以前未创建的索引下添加数据时提供自动索引和映射。换句话说,可以在没有索引的情况下将数据添加到Elasticsearch中,并且先验地定义映射。这非常方便,因为Elasticsearch会自动适应提供给它的数据 - 而且,如果某些条目有额外的字段,Elasticsearch无架构性质允许它们被索引而没有任何问题。
因此,您添加的新字段将自动添加到您的映射中。
有关详细信息,请参阅this