工作需要开发一款elasticsearch插件,来完成某项工作,根据其它插件的源码,依瓢画葫芦,总结一下开发一个elasticsearch插件的流程:
第一步:首先创建一个java的maven工程,依赖elasticsearch的jar包
org.elasticsearch
elasticsearch
1.2.1
provided
第二步:在类文件下创建一个es-plugin.properties文件,指定插件加载入口
plugin=org.elasticsearch.plugin.zhaoyanblog.myplugin
第三步:创建MyPlugin类,继承org.elasticsearch.plugins.AbstractPlugin。
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。注入我们的服务类。
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内部对象
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,你的插件就会被加载了。