您的位置:首页 > 其它

怎么开发一款elasticseach的插件

2016-04-11 16:34 465 查看
第一步:首先创建一个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
67
8
9
10
1112
13
14
15
16
17
18
19
20
2122
23
24
25
26
27
28
29
30
3132
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
67
8
9
10
1112
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
67
8
9
10
1112
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,你的插件就会被加载了。

本文地址:http://zhaoyanblog.com/archives/671.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: