Elasticsearch 1.X 版本Java插件开发
接上一篇《Elasticsearch 2.X 版本Java插件开发简述》
开发1.X版本elasticsearch java插件与2.X版本有一些不同,同时在安装部署上也有些不同,主要区别如下:
1:插件入口plugin区别与2.X版本,改为继承org.elasticsearch.plugins.AbstractPlugin,而Plugin作为一个接口被AbstractPlugin实现,具体代码如下:
package com.gridsum.es.rest.plugin;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.rest.RestModule;
public class MyRestPlugin extends AbstractPlugin {
public String description() {
// TODO Auto-generated method stub
return "rest plugin 4 elasticsearch-1.x";
}
public String name() {
// TODO Auto-generated method stub
return "rest plugin 1.x";
}
public void onModule(RestModule module){
module.addRestAction(MyRestHandler.class);
}
}
2:elasticsearch配置文件的读取从plugin子类中读取改为在handler中读取,具体代码如下:
package com.gridsum.es.rest.plugin;
import org.elasticsearch.rest.*;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import com.gridsum.es.rest.plugin.MyRestFilter;
//import java.util.Map;
//import java.util.TreeMap;
public class MyRestHandler extends BaseRestHandler {
@Inject
protected MyRestHandler(Settings settings, RestController controller,
Client client) {
super(settings, controller, client);
GetPluginSettings(settings);
RestFilter filter = new MyRestFilter(client);
controller.registerFilter(filter);
}
@Override
protected void handleRequest(RestRequest request, RestChannel channel,
Client client) throws Exception {
// TODO Auto-generated method stub
}
private void GetPluginSettings(Settings settings){
if(null == settings){
MyLogger.info("Get settings failed: the settings is null.");
return;
}
// MyLogger.info("Begin to get plugin settings...");
// Map<String,String> s = settings.getAsMap();
// for(Map.Entry<String, String> m : s.entrySet()){
// MyLogger.info("key="+m.getKey()+",value="+m.getValue());
// }
String isPluginEnabled = settings.get("ld.enabled");
MethodAuthenticator.setEnabledStr(isPluginEnabled);
if(isPluginEnabled != null && isPluginEnabled.toLowerCase().equals("true")){
MethodAuthenticator.setIsPluginEnabled(true);
String[] denyMethods = settings.getAsArray("ld.deny", new String[]{});
if(denyMethods != null && denyMethods.length > 0){
MethodAuthenticator.setDenyMethods(denyMethods);
} else {
MyLogger.warn("The deny method(s) is empty.");
}
} else {
MethodAuthenticator.setIsPluginEnabled(false);
}
}
}
3:Filter的实现跟2.X版本是一致的,均继承自org.elasticsearch.rest.RestFilter抽象类;
4:配置文件与2.X不同,在src/main/resources下不是使用的plugin-descriptor.properties配置文件,而是一个简单的es-plugin.properties文件,该文件只是简单地指明了AbstractPlugin实现类的命名,如下所示:
plugin=com.gridsum.es.rest.plugin.MyRestPlugin
注意这个值包含package+类名,用于反射该类。
5:同样使用maven打包后,zip文件内包含一个jar文件及第4步定义的properties文件即可;
6:部署插件的方式与2.X版本有所不同,具体部署指令如下所示:
/usr/share/elasticsearch/bin/plugin --url file:///opt/myrest.zip --install rest.plugin1x
与2.X版本部署不同的是,1.X版本中,插件ZIP包的路径由--url获取,而--install后参数为该插件的命名(pom.xml中的project.name值或build.finalName值)。
7:部署后仍然以同样的方法在默认路径/etc/elasticsearch/elasticsearch.yml的配置文件中加入配置信息,重新启动elasticsearch即可。
8:关于1.X版本的多版本支持,比2.X方便的是1.X版本插件可以直接支持多版本,在我测试的1.5.0/1.5.2/1.7.3三个版本中,都是同一个插件包,均可正常使用,由此可见,至少在Request处理这个环节上,1.X的多版本处理方式是一致的。
Elasticsearch 1.X 版本Java插件开发的更多相关文章
- Elasticsearch 2.X 版本Java插件开发简述
1:elasticsearch插件分类简述 2:Java插件开发要点 3:如何针对不同版本elasticsearch提供多版本的插件 4:插件具有外部依赖时遇到的一些问题(2016-09-07更新) ...
- elasticsearch源码分析及插件开发
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- Elasticsearch教程(二)java集成Elasticsearch
1.添加maven <!--tika抽取文件内容 --> <dependency> <groupId>org.apache.tika</groupId> ...
- Elasticsearch 6.x版本全文检索学习之分布式特性介绍
1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...
- Elasticsearch 6.x版本全文检索学习之Search API
Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...
- 微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱
微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱 微信搜索微信号 fanli-x 或 扫描下方二维码,可查看效果. 非web版微信,pc/移动版微信 支持新号24小时 不封号! 有任 ...
- 下载各个版本java (Java Development Kit)
本文介绍怎么样下载各个版本java开发工具包. 方法/步骤 打开官方下载网址:http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- 关于消息推送的补充,主要介绍服务端的实现,包含object c 版本 c 版本 java 版本 php 版本 (转)
要实现消息推送功能,我们可以采用第三方(腾讯:信鸽:百度:云推送:极光推送:友盟):当然,因为各种原因,我们不能使用第三方的推送服务,那我们就需要自己编写服务端.在网上寻觅了很久,找到一篇很不错的讲解 ...
随机推荐
- extra增强延迟加载
这种配置和配置为lazy=true是一样的,但它的好处在于调用size/contains等方法时,并不查询整个集合的数据,而是发送一条sql语句来处理,只有真正在使用时才全部去查询整个集合
- 转:linux下安装或升级GCC4.8,以支持C++11标准
转:http://www.cnblogs.com/lizhenghn/p/3550996.html C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言 ...
- bzoj4034: [HAOI2015]T2
4034: [HAOI2015]T2 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2684 Solved: 843 Description 有一 ...
- C# — FileHandler
学会使用OpenFileDialog和SaveFileDialog控件浏览和选择文件.使用System.IO.File和System.IO.Directory的对象来操纵文件系统(文件和目录). 在F ...
- 加载cocos studio场景
今天尝试加载cocos studio的场景. 新版的cocos studio中,"导出"选项变成了"发布".发布之后会生成一个res文件夹,其中每个场景有一个. ...
- 在Java代码中使用pdfBox将PDF转换为图片
生成图片 // 生成图片 PDDocument pd = PDDocument.load(new File(filePath)); PDFRenderer pdfRenderer = new PDFR ...
- sqlserver 通用分页存储过程
来源:http://www.jb51.net/article/19936.htm CREATE PROCEDURE commonPagination ), --要显示的列名,用逗号隔开 ), --要查 ...
- usb驱动开发12之设备生命线
函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了 ...
- 条件变量pthread_cond_t怎么用
#include <pthread.h> #include <stdio.h> #include <stdlib.h> pthread_mutex_t mutex ...
- git push ERROR: missing Change-Id in commit message footer
今天上传代码时候报告错误:$ git push origin HEAD:refs/for/branch*Counting objects: 7, done.Delta compression usin ...