Elasticsearch映射无法按预期工作

时间:2016-02-10 10:48:11

标签: elasticsearch

具有以下映射:

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
}'

似乎映射没有对我添加的元素生效。当我尝试映射我的类型时,我做错了什么?

2 个答案:

答案 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