一尘不染

Elasticsearch映射无法按预期工作

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

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


阅读 233

收藏
2020-06-22

共1个答案

一尘不染

这是Elasticsearch的默认行为,在大多数情况下是理想的。但是对于您的情况,如果您不想允许索引未在映射中定义的字段,则需要更新映射并将其"dynamic"属性设置为"strict"。基本上,您的映射定义应如下所示:

{
  "mappings": {
    "el_tipo": {
      "dynamic": "strict",
      "properties": {
        "name": {
          "type": "string" 
        },
        "age": {
          "type": "integer" 
        },
        "read": {
          "type": "integer" 
        }
      }
    }
  }
}

然后,如果您尝试为“ jose”,“ ramon”或“
garcia”之类的字段建立索引,Elasticsearch将抛出一条适当的消息,提示禁止动态添加这些字段。

2020-06-22