第一步:首先创建一个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,你的插件就会被加载了。