怎么开发一款elasticseach的插件

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

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *