elasticsearch5.0.0分配的变化Http协议和REST接口的变化

分配的变化,主分片分配node

再次以前,当指定数量的分配副本被发现时主分片被分配(这个数量由 index.recovery.initial_shards参数指定,如今已经废弃了)。在这种状况下,若是主分片的配置只有一个副本,就是集群的定义是一个单一的分片,这意味着索引的任何分片拷贝都有可能成为主分片,甚至是一个好久之前的数据。如今经过分配分片IDs来解决这个问题。json

分配给分片拷贝一个惟一的IDs做为标志。这容许集群区分有效的相同的数据和路径的多个副本,在集群启动后,只有分片的副本包含最新的数据时才能够成为主分片。app

经过分配IDs来代替之前的版本号来识别分片的拷贝,在索引分片存储API中也作了相应的调整。例如:jvm

请求:GET http://127.0.0.1:9200/secilog/_shard_storeselasticsearch

返回值:插件

{
    ...
   "0": { 
        "stores": [ 
            {
                "sPa3OgxLSYGvQ4oPs-Tajw": { 
                    "name": "node_t0",
                    "transport_address": "local[1]",
                    "attributes": {
                        "mode": "local"
                    }
                },
                "allocation_id": "2iNySv_OQVePRX-yaRH_lQ", 
                "legacy_version": 42, 
                "allocation" : "primary" | "replica" | "unused", 
                "store_exception": ... 
            },
            ...
        ]
   },
    ...
}

在返回的结果中,新的版本返回字段是allocation_id,老版本返回的字段是version。这个字段可用于建立Elasticsearch的当前版本或者在集群中有效的版本中全部分片的拷贝。legacy_version字段能够能够理解为之前版本的version字段。索引

路由命令在新的版本中有两条命令,allocate_replica 和allocate_empty_primary。咱们引入了一个先的命令allocate_stale_primary。allocate_replica命令能够理解为之前设置allow_primary为false的状况,allocate_empty_primary命令能够理解为之前设置allow_primary为ture的状况。token

自定义路由命令Elasticsearch再也不支持注册自定义配置命令插件。接口

index.shared_filesystem.recover_on_any_node为true的行为进行了调整,在以前当没有分片的副本被发现时,有可能选择任意的节点,但如今为了考虑平衡进行有选择的分配节点。ip

分片副本的发现的行为也发生了变化,在以前若是没有知足条件的分片副本则不进行分片副本分配,但如今能够分配分配的副本。

HTTP changes

HTTP协议请求压缩始终被支持,在以前的版本中须要设置http.compressed为true才开启压缩功能。

REST API changes

在之前的REST查询中,若是有没法识别字符串参数将被忽略。从用户的角度来看,这样并不合理,但如今的版本若是有不能识别的字符串参数将返回错误。

自定义id的长度若是超过512则会被拒绝。

/_optimize结尾的请求将被移除,取而代之的是/_forcemerge

在GET方式的HTTP请求中/_forcemerge将不在支持,能够换成用POST方式的请求。

建立索引的方式只能用PUT方式,以前建立因此既能够用PUT也能够用POST。如今只支持PUT方式。

判断索引是否存在的接口HEAD {index}/{type} 被替换成了{index}/_mapping/{type},为了兼容性5.0版本还可使用,将在6.0版本中移除。

在 /_cluster/stats统计返回值中去掉了mem内存部分。

在接口/_cluster/state的routing table中移除了分片版本号。在集群状态中存储了分片的id,用选择主分片的方式来代替版本信息。

节点角色信息将再也不是节点属性的一部分。节点角色在节点统计的返回值中。

禁止不带引号的JSON,此前,JSON文档被容许有不带引号的字段的名称,这种写法不是严谨的JSON格式,若是在以前的ES版本中有不带引号的字段,有些操做可能会报错,所以在jvm.options文件中增长了一个配置-Delasticsearch.json.allow_unquoted_field_names。这个配置将在6.0版本中移除。

过滤接口中的char_filters参数被命名为char_filter。token_filters参数将被移除,用filter代替。

Delete-By-Query插件中的DELETE /_query请求被移除,用Delete By Query接口代替。

PUT /_scripts/{lang}/{id}/_create建立脚本索引被移除,用stored scripts来代替。

PUT /_search/template/{id}/_create建立索引模板被移除。用Pre-registered模板来代替。

有些REST接口的结尾能够增长键值对的方式,如今这种方式被移除。

在_cluster/health之前须要大量的wait_for_relocating_shards参数,如今只须要设置boolean类型的wait_for_no_relocating_shards参数,若是设置为true,表示请求将等待(直到配置超时)的集群返回以前没有分片的搬迁。默认为false,这意味着操做不会等待。

本文由赛克 蓝德(secisland)原创,转载请标明做者和出处。

相关文章
相关标签/搜索