介绍
如何利用elasticsearch插件进行开发?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
检索引擎elasticsearch支持插件模式,有些时候你可能须要安装一些插件。甚至自己开发插件,这里就提供一个開始ES插件开发演示样例,ES版本号为1.5.2。
<强>一、插件类继承自org.elasticsearch.plugins。AbstractPlugin 强>
包org.elasticsearch.plugin.helloworld; 进口java.util.ArrayList; 进口java.util.Collection; 进口java.util.Collections; 进口org.elasticsearch.common.component.LifecycleComponent; 进口org.elasticsearch.common.inject.Module; 进口org.elasticsearch.common.logging.ESLogger; 进口org.elasticsearch.common.logging.Loggers; 进口org.elasticsearch.common.settings.Settings; 进口org.elasticsearch.plugins.AbstractPlugin; 进口org.elasticsearch.rest.RestModule; 公开课HelloWorldPlugin延伸AbstractPlugin { 最后ESLogger记录器=Loggers.getLogger (getClass ()); @Override 公共字符串名称(){//插件名称 返回“HelloWorld"; } @Override 公共字符串描述(){//插件描写叙述 返回“Hello World Plugin"; }//处理模块,由于系统中有非常多种模块,所以须要对其类型进行推断 @Override 公共空间processModule(模块模块){ 如果(模块instanceof RestModule) { ((RestModule)模块).addRestAction (HelloWorldHandler.class); } 如果(模块instanceof HelloModule) { logger.info(“# # # # # # # # # # # # # #过程你好模块# # # # # # # # # # # # # # # # # # # # #“); } } @Override 公共Collection模块设置(设置){//创建自己的模块集合//假设没有自己定义模块,则能够返回空 HelloModule HelloModule=new HelloModule (); ArrayList ,列表=new ArrayList<的在(); list.add (helloModule); Collections.unmodifiableList(列表); 返回列表; } @SuppressWarnings (“rawtypes") @Override 公共Collection 模块类事实上就是定义了依赖注入规则。假设不清楚,能够去查看Google Guice的文档,基本上是一致的。如上例中的HelloModule:
包org.elasticsearch.plugin.helloworld; 进口org.elasticsearch.common.inject.AbstractModule; 进口org.elasticsearch.common.inject.Scopes; 公开课HelloModule延伸AbstractModule { @Override 保护无效配置(){//将InjectableService接口类型绑定到InjectableServiceImpl实现类//在须要注入InjectableService的地方,就会使用InjectableServiceImpl实例 bind (InjectableService.class), (InjectableServiceImpl.class);//使HelloService为单例状态 绑定(HelloService.class)在(Scopes.SINGLETON); } }不同的模块有不同的处理方式,比如样例中对于RestModule,加入了一个处理程序:
包org.elasticsearch.plugin.helloworld; 进口org.elasticsearch.client.Client; 进口org.elasticsearch.common.inject.Inject; 进口org.elasticsearch.common.settings.Settings; 进口org.elasticsearch.rest.BaseRestHandler; 进口org.elasticsearch.rest.BytesRestResponse; 进口org.elasticsearch.rest.RestChannel; 进口org.elasticsearch.rest.RestController; 进口org.elasticsearch.rest.RestRequest; 进口org.elasticsearch.rest.RestStatus; 进口org.elasticsearch.rest.RestRequest.Method; 进口org.elasticsearch.rest.RestResponse; 公开课HelloWorldHandler延伸BaseRestHandler {//注入对象 @ inject 保护HelloWorldHandler(设置设置,RestController控制器,客户端){ 超级(设置、控制器、客户);//将该处理程序绑定到某訪问路径 controller.registerHandler(方法。,“/hello/?这个); controller.registerHandler(方法。,“/hello/{名称}“,这个); }//处理绑定路径的请求訪问 @Override 保护无效handleRequest (RestRequest请求,RestChannel频道,客户端){抛出异常 logger.debug (“HelloWorldAction.handleRequest called"); 最终字符串名称=request.hasParam (“name"), # 63;request.param (“name"):“world"; 字符串内容=皗\ \“成功“:真的,\“\“消息:\“你好“+名称+“\“}”;=新BytesRestResponse (RestStatus RestResponse响应。好的,BytesRestResponse。TEXT_CONTENT_TYPE、内容); channel.sendResponse(响应); } }如何利用elasticsearch插件进行开发