# Plugin改变

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

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

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

命令bin/plugin已重命名为bin/elasticsearch-plugin。插件ZIP存档的结构已更改。所有的插件文件必须包含在名为elasticsearch的顶级目录中。如果你使用gradle build，这个结构是自动生成的。

## 插件隔离

隔离选项已删除。每个插件都有自己的类加载器。

## 已删除网站插件

网站插件已删除。网站插件应重新实现为Kibana插件。

## 删除多播插件

组播已删除。使用单播发现，或其中一个云发现插件。

## 具有自定义查询实现的插件

实现自定义查询的插件需要在其QueryParser子类中实现fromXContent(QueryParseContext)方法，而不是解析。此方法将处理将查询从XContent格式解析为中间查询表示，可以在二进制格式的节点之间流式传输，有效地在java api中使用查询对象。此外，查询构建器需要注册为NamedWriteable。这一切都是通过实现SearchPlugin接口并覆盖getQueries方法来完成的。然后，查询对象可以通过新的toQuery（QueryShardContext）方法将自身转换为lucene查询，该方法返回要在数据节点上执行的lucene查询。

同样，实现自定义分数函数的插件需要在ScoreFunctionParser子类中实现fromXContent（QueryParseContext）方法，而不是解析。此方法将处理从XContent格式的函数解析为中间函数表示，可以在二进制格式的节点之间流式传输，有效地在java api中使用的函数对象。函数对象然后可以通过新的toFunction（QueryShardContext）方法将自身转换为lucene函数，该方法返回要在数据节点上执行的lucene函数。

## Cloud AWS插件改变

Cloud AWS插件已分为两个插件：

*   [Discovery EC2 plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/discovery-ec2.html)
*   [Repository S3 plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/repository-s3.html) 

两个插件的代理设置已重命名：

*   从cloud.aws.proxy_host         到  cloud.aws.proxy.host
*   从cloud.aws.ec2.proxy_host  到  cloud.aws.ec2.proxy.host
*   从cloud.aws.s3.proxy_host    到  cloud.aws.s3.proxy.host
*   从cloud.aws.proxy_port         到  cloud.aws.proxy.port
*   从cloud.aws.ec2.proxy_port  到  cloud.aws.ec2.proxy.port
*   从cloud.aws.s3.proxy_port    到  cloud.aws.s3.proxy.port

## 
Cloud Azure插件改变

Cloud Azure插件已分为三个插件：

*   [Discovery Azure plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/discovery-azure-classic.html)
*   [Repository Azure plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/repository-azure.html)
*   [Store SMB plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/store-smb.html)

如果你使用cloud-azure插件进行快照和恢复，你在elasticsearch.yml中：

```
cloud:
    azure:
        storage:
            account: your_azure_storage_account
            key: your_azure_storage_key
```

您现在需要为存储详细信息指定唯一的ID，因为您可以定义多个存储帐户：

```
cloud:
    azure:
        storage:
            my_account:
                account: your_azure_storage_account
                key: your_azure_storage_key
```

## Cloud GCE插件更改

Cloud GCE插件已重命名为[Discovery GCE](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/discovery-gce.html)插件。

## 删除了按查询删除的插件

已删除“按查询删除”插件，以便在核心中使用新的[按查询API删除](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/docs-delete-by-query.html)的实现。它现在支持限制，重试和取消，但不再支持超时。而是使用 [cancel API](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/docs-delete-by-query.html#docs-delete-by-query-cancel-task-api "Works with the Cancel Task APIedit") 取消运行时间过长的删除。

## Mapper附件插件已弃用

映射程序附件已被弃用。用户现在应该使用 `[ingest-attachment](https://www.elastic.co/guide/en/elasticsearch/plugins/5.0/ingest-attachment.html) `插件。

## 传递Java系统属性

以前，可以通过将-D样式参数直接传递给插件脚本来将Java系统属性传递给插件命令。不再允许这样做，并且必须通过ES_JAVA_OPTS传递此类系统属性。

## 自定义插件路径

通过path.plugins指定自定义插件路径的功能已删除。

## ScriptPlugin

注册自定义脚本的插件应该实现ScriptPlugin并删除其 onModule(ScriptModule)实现。

## AnalysisPlugin

注册自定义分析组件的插件应该实现AnalysisPlugin并删除其 `onModule(AnalysisModule) `实现。

## MapperPlugin

注册自定义映射器的插件应实现MapperPlugin并删除其 onModule(IndicesModule) 实现。

## ActionPlugin

注册自定义操作的插件应该实现ActionPlugin并删除其 onModule(ActionModule) 实现。

注册自定义RestHandler的插件应该实现`ActionPlugin并删除它们的 `onModule(NetworkModule)`  实现。

## SearchPlugin

注册自定义搜索时间行为的插件（Query，Suggester，ScoreFunction，FetchSubPhase，Highlighter等）应实现SearchPlugin并删除其 onModule(SearchModule) 实现。

## SearchParseElement

SearchParseElement接口已删除。自定义搜索请求部分只能在ext元素下提供。插件可以通过提供SearchPlugin.SearchExtSpec来插入自定义解析器，它包含一个SearchExtParser实现，它可以将`XContent`解析成一个SearchExtBuilder实现。解析现在发生在协调节点中。解析的结果与搜索请求的其余部分一起通过传输层串行化到数据节点，并且存储在搜索上下文中以供稍后检索。

## 测试自定义插件

ESIntegTestCase＃pluginList已删除。使用Arrays.asList。现在不需要所有的插件都需要Java 1.8。

## Mapper-Size插件

元数据字段_size在聚合，脚本和为2.x中创建的索引排序时不可访问。如果应用程序中需要这些功能，则需要使用Elasticsearch 5.x重新索引数据。