# REST API改变

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_rest_api_changes.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_rest_api_changes.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260795](http://www.apache.wiki/pages/viewpage.action?pageId=4260795)

贡献者 : [片刻](/display/~jiangzhonglian)

## 严格的REST查询字符串参数解析

先前版本的Elasticsearch忽略无法识别的URL查询字符串参数。这意味着Elasticsearch将默认接受包含打印错误的无关参数或参数。这从最终用户的角度是危险的，因为这意味着所提交的请求将以不预期的方式执行。此宽容已删除，Elasticsearch现在将失败包含无法识别的查询字符串参数的任何请求。

## 超过512字节的ID值被拒绝

当指定大于512字节的_id值时，请求将被拒绝。

## /_optimize终结点删除

已弃用 /_optimize 端点已删除。应使用 /_forcemerge 端点来代替optimize。

/_forcemerge的GET HTTP动词不再受支持，请使用POST HTTP动词。

## 索引创建端点仅接受PUT

以前可以通过调用PUT index_name或POST index_name来创建索引。只有前者现在支持。

## HEAD {index} / {type}替换为HEAD {index} / _ mapping / {type}

用于检查类型是否存在的端点已经从{index}/{type}改为{index} /_ mapping/{type}，以便在使用HEAD {index}/{id}时准备删除类型以检查文档是否存在于索引中。旧的端点将继续工作，直到6.0。

## 从 /_cluster/stats响应中删除了mem部分

mem部分只包含总值，实际上是集群中所有节点可用的内存。该部分现在包含total，free，used，used_percent和free_percent。

## /_cluster/stats返回的修订的节点角色聚合

客户机master_only，data_only和master_data字段已被删除，有利于master，data，ingest和coordinating_only。节点可以贡献多个计数，因为它可以有多个角色。每个节点都隐式地是协调节点，因此每当节点没有显式角色时，它将被计为仅协调。

## 从 /_cluster/state 路由表中删除碎片版本信息

我们现在在集群状态中存储分片的分配ID，并使用它来选择主分片，而不是版本信息。

## 节点角色不再是节点属性的一部分

节点角色现在在特定部分返回，称为角色，作为节点stats和节点信息响应的一部分。新部分是一个数组，包含每个节点实现的所有不同的角色。在数组返回为空的情况下，这意味着该节点是仅协调节点。

## 禁止未引用的JSON

以前，允许JSON文档带有未引用的字段名称，这不是严格的JSON和打破一些Elasticsearch客户端。如果文档已在以前的Elasticsearch版本中用非引用字段编入索引，某些操作可能会抛出错误。为了伴随此，已注释掉的JVM选项已添加到jvm.options文件中：-Delasticsearch.json.allow_unquoted_field_names。

请注意，此选项仅用于迁移目的，将在Elasticsearch 6.0.0中删除。

## 分析API改变

过滤器和char_filters参数已重命名为filter和char_filter。已删除token_filters参数。请改用滤镜。

## DELETE  /_query端点已删除

删除按查询插件提供的DELETE / _query端点已删除，并被按查询删除API替换。

## 创建存储脚本端点已删除

之前允许创建索引脚本的PUT / _scripts / {lang} / {id} / _ create端点已删除。索引脚本已替换为存储的脚本。

## 创建存储的模板端点已删除

以前允许创建索引模板的PUT / _search / template / {id} / _ create端点已删除。索引模板已被预注册的模板替换。

## 删除属性支持

一些REST端点（例如，集群更新索引设置）支持以Java属性格式（行分隔键=值对）检测内容。此支持已删除。

## wait_for_relocating_shards现在是 /_cluster/health 中的wait_for_no_relocating_shards

用于获取数字的wait_for_relocating_shards参数现在只是一个布尔标记wait_for_no_relocating_shards，如果设置为true，则意味着请求将等待（直到配置的超时）集群在返回之前没有分片重定位。默认为false，这意味着操作不会等待。