ElasticSearch 5.6使用_doc作为映射类型名报错的问题咨询
解决Elasticsearch 5.6.5中使用
_doc作为映射类型名报错的问题 我之前在适配ES版本升级的时候也碰到过一模一样的问题,咱们来拆解下原因和解决办法:
问题根源
Elasticsearch 5.x版本默认会阻止用户创建以下划线开头的映射类型名(这类名称通常被ES内部保留使用)。虽然官方文档提到5.6版本开始支持_doc作为单类型索引的特例,方便后续适配6.x/7.x的API,但这个特性并没有默认开启,需要手动打开集群级别的配置开关才能生效。
解决步骤
你需要先通过动态集群设置开启允许下划线开头的类型名,不用重启集群,执行以下请求即可:
PUT _cluster/settings { "persistent": { "index.mapping.allow_type_names_starting_with_underscore": true } }
执行成功后,再重新运行你原来的索引创建请求:
PUT localhost:9200/users { "settings": { "index.mapping.single_type": true }, "mappings": { "_doc": { "properties": { "name": { "type": "text" }, "user_name": { "type": "keyword" }, "email": { "type": "keyword" } } } } }
这次应该就能成功创建索引了。
补充说明
如果是Docker部署的集群,你也可以通过修改elasticsearch.yml配置文件添加以下内容,然后重启容器来永久生效:
index.mapping.allow_type_names_starting_with_underscore: true
不过动态设置的方式更快捷,适合不需要重启集群的场景。
内容的提问来源于stack exchange,提问作者AdrienF
相关产品推荐
相关产品推荐

