Elasticsearch 7.14移除映射类型后为何仍需PUT到含type的嵌套URI
问题原因说明
首先你对映射类型移除和API路径的对应关系存在误解,核心原因如下:
- Elasticsearch 7.x版本只是移除了单索引下多类型共存的能力,并没有修改REST API的路径结构,文档写入的标准路径格式依然是三段结构:
/{索引名}/_doc/{文档ID},其中_doc是7.x之后统一的默认唯一类型名,不需要自定义。 - 你第一个请求
PUT /products/1?pretty的路径只有两段,不符合文档写入的路径规则,Elasticsearch会把该请求解析为其他API的调用,因此返回405方法不允许的报错,和类型本身是否被移除无关。
正确的标准写法
不需要自定义类型名,直接在类型位填写默认的_doc即可:
curl -X PUT "localhost:9200/products/_doc/1?pretty" -H 'Content-Type: application/json' -d' { "name": "Toast" } '
关于你第二个请求能成功的说明
你用PUT /pop/products/1?pretty能成功,是因为该路径刚好是三段结构,Elasticsearch将路径段分别解析为:索引名为pop,类型名为products,文档ID为1。
该场景能生效是因为你的集群开启了旧版本兼容配置,支持在7.x版本下自定义单个类型名,属于过渡兼容能力,并非官方标准用法,8.x及以上版本已经完全移除该兼容能力,必须统一使用_doc作为类型位的固定值。
内容的提问来源于stack exchange,提问作者jsindos
相关产品推荐
相关产品推荐

