elasticsearch仍然创建了ad-hoc映射,禁用了动态映射

时间:2017-05-02 11:21:41

标签: java elasticsearch dynamic-mapping

我似乎不明白如何防止elasticsearch自动为新字段添加新映射。 documentation

  

也可以通过设置索引模板为所有索引禁用自动类型创建:

PUT _template/template_all
{
  "template": "*",
  "order":0,
  "settings": {
    "index.mapper.dynamic": false 
  }
}

所以这就是我在做的事情:

client.admin().indices()
    .preparePutTemplate("template_disable_dynamic_mapping")
    .setTemplate("*")
    .setSettings(Settings.builder().put("index.mapper.dynamic", false))
    .get();

在使用data的自定义映射创建索引后,我可以看到这些映射和设置,GET /data/_settings返回:

{
  "data": {
    "mappings": {
      "some_type": {
        "properties": {
          "value": {
            "type": "text"
          },
          [...]
        }
      }
    }
  },
  "settings": {
    "index": {
      "mapper": {
        "dynamic": "false"
      },
      [...]
    }
  }
}

现在,如果我使用新字段foo索引文档,它会成功插入,我的新映射如下所示:GET /data/_mapping

{
  "data": {
    "mappings": {
      "some_type": {
        "properties": {
          "foo": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "value": {
            "type": "text"
          },
          [...]
        }
      }
    }
  }
}

我的期望是不会创建新的映射。

0 个答案:

没有答案