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 版本 (转)
要实现消息推送功能,我们可以采用第三方(腾讯:信鸽:百度:云推送:极光推送:友盟):当然,因为各种原因,我们不能使用第三方的推送服务,那我们就需要自己编写服务端.在网上寻觅了很久,找到一篇很不错的讲解 ...
随机推荐
- Java的注解机制——Spring自动装配的实现原理
http://www.cnblogs.com/Johness/archive/2013/04/17/3026689.html
- [No00005C]我也入住Markdown
概览 宗旨 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所 ...
- [No00001F]阅读速度如何快一点、再快一点?-不知道读啥?试试这些电影剧本!
少侠萌好,还记得包大人给大家推荐过的语感培养大法——“电影剧本阅读法”吗?最近,包大人陆陆续续收到了好几位少侠的实践报告,他们中不少人抱怨:“大人,你明明说过电影剧本篇幅短.用词简单的,可为什么我还是 ...
- 审核被拒(后台定位,autio,voip,发表朋友圈)
APP上线审核被拒那些事(一) 2.3 - Apps that do not perform as advertised by the developer will be rejected 2.3 D ...
- Centos6 安装 Redis
先确认gcc和tcl已经安装 sudo yum install gcc-c++ sudo yum install tcl 解压, 编译和安装 .tar.gz /usr/src/ cd /usr/src ...
- SQL Server之游标的基础知识
什么是游标: 游标是可以在结果集中上下游动的指针. 游标的作用: --允许定位到结果集中的特定行. --从结果集的当前位置检索一行或多行数据. --支持对结果集中当前位置的行进行修改. 注意:游标虽然 ...
- LeetCode 01 Two Sum swift
class TwoSum { func sumTow(nums: [Int], target: Int)->[Int]{ ,]; ;x<nums.count;x++){ ;y<num ...
- mybatis3.2.8 与 hibernate4.3.6 混用
mybatis.hibernate这二个框架各有特色,对于复杂的查询,利用mybatis直接手写sql控制起来更灵活,而一般的insert/update,hibernate比较方便.同一个项目中,这二 ...
- cookie记住密码功能
很多门户网站都提供了记住密码功能,虽然现在的浏览器都已经提供了相应的记住密码功能 效果就是你每次进入登录页面后就不需要再进行用户名和密码的输入: 记住密码功能基本都是使用cookie来进行实现的,因此 ...
- lecture16-联合模型、分层坐标系、超参数优化及本课未来的探讨
这是HInton的第16课,也是最后一课. 一.学习一个图像和标题的联合模型 在这部分,会介绍一些最近的在学习标题和描述图片的特征向量的联合模型上面的工作.在之前的lecture中,介绍了如何从图像中 ...