工作需要开发一款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,你的插件就会被加载了。