elasticsearch插件开发教程

发布时间 - 2026-01-11 02:06:05    点击率:

检索引擎Elasticsearch支持插件模式。有些时候你可能须要安装一些插件。甚至自己开发插件,这里就提供一个開始ES插件开发演示样例,ES版本号为1.5.2。

一、插件类继承自org.elasticsearch.plugins.AbstractPlugin

package org.elasticsearch.plugin.helloworld;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

import org.elasticsearch.common.component.LifecycleComponent;
import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.rest.RestModule;

public class HelloWorldPlugin extends AbstractPlugin {
 final ESLogger logger = Loggers.getLogger(getClass());

 @Override
 public String name() {
 //插件名称
 return "HelloWorld";
 }

 @Override
 public String description() {
 //插件描写叙述
 return "Hello World Plugin";
 }
 
 //处理模块,由于系统中有非常多种Module,所以须要对其类型进行推断
 @Override
 public void processModule(Module module) {
 if(module instanceof RestModule) {
  ((RestModule)module).addRestAction(HelloWorldHandler.class);
 }
 
 if(module instanceof HelloModule) {
  logger.info("############## process hello module #####################");
 }
 }
 
 @Override
 public Collection<Module> modules(Settings settings) {
 //创建自己的模块集合
 //假设没有自己定义模块,则能够返回空
 HelloModule helloModule = new HelloModule();
 ArrayList<Module> list = new ArrayList<>();
 list.add(helloModule);
 Collections.unmodifiableList(list);
 return list;
 }
 
 @SuppressWarnings("rawtypes")
 @Override
 public Collection<Class<? extends LifecycleComponent>> services() {
 //创建自己的服务类集合,服务类须要继承自LifecycleComponent。ES会自己主动创建出服务类实例,并调用其start方法
 //假设没有自己定义服务类。则能够返回空
 Collection<Class<?
 extends LifecycleComponent>> list = new ArrayList<>();
 list.add(HelloService.class);
 return list;
 }
 
}

Module类事实上就是定义了依赖注入规则。假设不清楚,能够去查看Google Guice的文档,基本上是一致的。如上例中的HelloModule:

package org.elasticsearch.plugin.helloworld;

import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.Scopes;

public class HelloModule extends AbstractModule {

 @Override
 protected void configure() {
 //将InjectableService接口类型绑定到InjectableServiceImpl实现类
 //在须要注入InjectableService的地方,就会使用InjectableServiceImpl实例
 bind(InjectableService.class).to(InjectableServiceImpl.class);
 //使HelloService为单例状态
 bind(HelloService.class).in(Scopes.SINGLETON);
 }
 
}

不同的模块有不同的处理方式,比如样例中对于RestModule,加入了一个Handler:

package org.elasticsearch.plugin.helloworld;

import org.elasticsearch.client.Client;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestChannel;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.rest.RestRequest.Method;
import org.elasticsearch.rest.RestResponse;


public class HelloWorldHandler extends BaseRestHandler {

 //注入对象
  @Inject
  protected HelloWorldHandler(Settings settings, RestController controller, Client client) {
 super(settings, controller, client);
 //将该Handler绑定到某訪问路径
 controller.registerHandler(Method.GET, "/hello/", this);
 controller.registerHandler(Method.GET, "/hello/{name}", this);
 }

 //处理绑定路径的请求訪问
 @Override
 protected void handleRequest(RestRequest request, RestChannel channel, Client client) throws Exception {
 logger.debug("HelloWorldAction.handleRequest called");
 final String name = request.hasParam("name") ? request.param("name") : "world";
 
 String content = "{\"success\":true, \"message\":\"hello " +name+ "\"}";
 
 RestResponse response = new BytesRestResponse(RestStatus.OK, BytesRestResponse.TEXT_CONTENT_TYPE, content);
 channel.sendResponse(response);
 }
}

最后在类路径根文件夹下加入一个名为es-plugin.properties属性文件,指定插件实现类:

plugin=org.elasticsearch.plugin.helloworld.HelloWorldPlugin

二、将插件打成jar包后安装

如果ES_HOME代表Elasticsearch安装文件夹。在ES_HOME/plugins文件夹下创建一个名为HelloWorld的文件夹。该文件夹名称必须与插件名称同样(区分大写和小写),然后将jar包拷贝至HelloWorld文件夹,又一次启动就可以,当你运行:
curl -GET localhost:9200/hello,就会返回对应结果了。

三、为插件加入页面

假设你想为你的插件加入訪问页面。则能够在ES_HOME/plugins/HelloWorld文件夹下创建一个名为"_site"的文件夹,该文件夹名称必须为_site,然后将对应的html页面放置进_site文件夹就可以,假设放置了一个名为index.html文件,则能够通过

localhost:9200/_plugin/HelloWorld/index.html进行訪问。
因为Elasticsearch提供了jsclientAPI。所以使用html静态页面与js就能够完毕对应的功能了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# elasticsearch  # 插件开发  # ElasticSearch6.2.3+head插件安装的方法步骤  # Java elasticsearch安装以及部署教程  # Elasticsearch插件及nodejs的安装配置  # 自己的  # 则能  # 就会  # 绑定  # 创建一个  # 就可以  # 样例  # 当你  # 中有  # 你想  # 不清楚  # 对其  # 提供一个  # 将该  # 大家多多  # 事实上  # 文档  # void  # org 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  浅述节点的创建及常见功能的实现  敲碗10年!Mac系列传将迎来「触控与联网」双革新  浅析上传头像示例及其注意事项  Laravel如何升级到最新版本?(升级指南和步骤)  如何快速搭建安全的FTP站点?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何用已有域名快速搭建网站?  网站制作壁纸教程视频,电脑壁纸网站?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  linux top下的 minerd 木马清除方法  如何用PHP快速搭建CMS系统?  Java解压缩zip - 解压缩多个文件或文件夹实例  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Linux安全能力提升路径_长期防护思维说明【指导】  香港服务器网站推广:SEO优化与外贸独立站搭建策略  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何在云服务器上快速搭建个人网站?  WordPress 子目录安装中正确处理脚本路径的完整指南  如何自定义建站之星模板颜色并下载新样式?  如何在橙子建站上传落地页?操作指南详解  如何在Windows虚拟主机上快速搭建网站?  JavaScript中的标签模板是什么_它如何扩展字符串功能  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何在局域网内绑定自建网站域名?  如何在阿里云ECS服务器部署织梦CMS网站?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel如何处理和验证JSON类型的数据库字段  Laravel怎么实现模型属性的自动加密  魔毅自助建站系统:模板定制与SEO优化一键生成指南  教你用AI润色文章,让你的文字表达更专业  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  IOS倒计时设置UIButton标题title的抖动问题  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Python文件流缓冲机制_IO性能解析【教程】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何打造高效商业网站?建站目的决定转化率  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  大同网页,大同瑞慈医院官网?