Python Language
扩展es的安全策略,比如控制api的访问权限等
优秀插件代表:X-Pack
扩展es的快照和恢复功能
扩展es的存储方式,es默认使用的是Lucene存储数据的
优秀插件代表:
Store SMB Windows SMB
一 . 建立插件描述文件
es插件描述文件名为 plugin-descriptor.properties
放在 src/main/resources/
目录下,内容如下
属性
描述
name
插件名字
version
插件版本
description
插件功能描述
classname
插件入口class,完整路径
java.version
jdk 版本
elasticsearch.version
elasticsearch 版本
内容如下,这里都是引用项目的配置属性
version=${project.version}
description=${project.description}
name=${es.plugin.name}
classname=${es.plugin.classname}
java.version=${es.plugin.java.version}
elasticsearch.version=${es.version}
二. pom.xml 配置,已经打包配置
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> 4.0.0 com.caspar.es.plugin es-plugin-hello 5.5.3 es-plugin-hello My first es plugin org.elasticsearch elasticsearch ${es.version} provided src/main/resources true *.properties org.apache.maven.plugins maven-compiler-plugin 2.3.2 ${java.version} maven-assembly-plugin 2.4 false src/main/assemblies/plugin.xml es-plugin-hello make-assembly package single release zip false /elasticsearch/ true true /elasticsearch/ /elasticsearch/ 三. 插件入口开发 插件入口需要继承Plugin类,然后实现相应的插件类型接口,去做相应的处理。我们这里实现ActionPlugin接口 实现一个api的插件类型,需要重写getRestHandlers方法,并将自己处理业务逻辑的handler类注册进去 package com.caspar.es.plugin.hello; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.node.DiscoveryNodes; import org.elasticsearch.common.settings.ClusterSettings; import org.elasticsearch.common.settings.IndexScopedSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.SettingsFilter; import org.elasticsearch.plugins.ActionPlugin; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import java.util.Collections; import java.util.List; import java.util.function.Supplier; /** @author caspar.chen @date 2018/9/16 **/ public class HelloPlugin extends Plugin implements ActionPlugin { @Override public List getRestHandlers(Settings settings, RestController restController, ClusterSettings clusterSettings, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver, Supplier nodesInCluster) { return Collections.singletonList(new HelloHandler(settings, restController)); } } 四. 插件处理Handler,处理具体业务逻辑 package com.caspar.es.plugin.hello; import org.elasticsearch.client.node.NodeClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.rest.*; import java.io.IOException; import java.util.Date; /** @author caspar @date 2018/9/16 **/ public class HelloHandler extends BaseRestHandler { protected HelloHandler(Settings settings, RestController restController) { super(settings); //api的url映射 restController.registerHandler(RestRequest.Method.GET, “/_hello”, this); } @Override protected BaseRestHandler.RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient nodeClient) throws IOException { //接收的参数 System.out.println(“params==” + restRequest.params()); long t1 = System.currentTimeMillis(); String name = restRequest.param(“name”); long cost = System.currentTimeMillis() - t1; //返回内容,这里返回一个处理业务逻辑的发费时间,前端传的name,以及当前时间。 return channel -> { XContentBuilder builder = channel.newBuilder(); builder.startObject(); builder.field(“cost”, cost); builder.field(“name”, name); builder.field(“time”, new Date()); builder.endObject(); channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); }; } } 开发好后,执行maven打包,会在target目录生成相应的zip文件。这个就是我们需要的插件包,后面安装插件会用到。 使用 bin/elasticsearch-plugin list 使用 bin/elasticsearch-plugin install ‘plugin name’plugin.xml
里面配置zip的打包配置HelloPlugin
内容
HelloHandler
内容
3. 插件管理
list
参数列出安装的所有插件
install
参数安装插件