工作需要开发一款elasticsearch插件,来完成某项工作,根据其它插件的源码,依瓢画葫芦,总结一下开发一个elasticsearch插件的流程:
第一步:首先创建一个java的maven工程,依赖elasticsearch的jar包
1 2 3 4 5 6 | <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>1.2.1</version> <scope>provided</scope> </dependency> |
第二步:在类文件下创建一个es-plugin.properties文件,指定插件加载入口
1 | plugin=org.elasticsearch.plugin.zhaoyanblog.myplugin |
第三步:创建MyPlugin类,继承org.elasticsearch.plugins.AbstractPlugin。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package org.elasticsearch.plugin.zhaoyanblog; import org.elasticsearch.common.collect.ImmutableList; import org.elasticsearch.common.inject.Module; import org.elasticsearch.plugins.AbstractPlugin; import org.elasticsearch.zhaoyanblog.MyModule; public class MyPlugin extend org.elasticsearch.plugins.AbstractPlugin { //我们的插件Module private static final Collection<Class<? extends Module>> modules = ImmutableList.<Class<? extends Module>> of(MyModule.class); /** * {@inheritDoc} */ public String name() { //插件名字 return "my-plugin"; } /** * {@inheritDoc} */ public String description() { //插件描述 return "my first plugin"; } @Override public Collection<Class<? extends Module>> modules() { return modules; } } |
第四步:创建自定义的Module。继承org.elasticsearch.common.inject.AbstractModule。注入我们的服务类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package org.elasticsearch.zhaoyanblog; import org.elasticsearch.common.inject.AbstractModule; public class MyModule extends AbstractModule { /** * {@inheritDoc} */ @Override protected void configure() { bind(MyService.class).asEagerSingleton(); } } |
第五步:编写我们的服务类MyService,使用org.elasticsearch.common.inject.Inject注解,注入我们所需要的elasticsearch内部对象
1 2 3 4 5 6 7 8 9 10 11 12 13 | package org.elasticsearch.zhaoyanblog; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.indices.IndicesService; public class MyService { @Inject public MyService(Settings setting, IndicesService indicesService) { //your code } } |
Settings setting是系统配置项
IndicesService indicesService 是操作索引服务对象
你还可以注入更多的内部对象,你可以参考AbstractModule所有内部子类bind的类。
只要你写到构造函数里,elasticsearch在加载你的插件的时候,都会传递给你。
你可以在构造方法里,初始化一些你自己的逻辑,例如给内部对象加个监听器啥的。
第六步:在elasticsearch的plugins目录下创建一个目录my-plugin。把你的代码打包,以及所有你依赖的第三方jar包都拷贝到这个目录下。重启elasticsearch,你的插件就会被加载了。
除非注明,赵岩的博客文章均为原创,转载请以链接形式标明本文地址
本文地址:https://zhaoyanblog.com/archives/671.html