如何利用elasticsearch插件进行开发

  介绍

如何利用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插件进行开发