ElasticSearch es 插件开发
ElasticSearch es 插件开发
1. 插件分类
API Extension Plugins API扩展插件
通过添加新的API或功能向Elasticsearch添加新功能,通常与搜索或映射有关。
优秀插件代表:
SQL language Plugin: 让 Elasticsearch 支持 SQL语句查询 (by NLPchina)Alerting Plugins 告警插件
监控Elasticsearch索引情况,并在超过某个阈值时触发告警。
优秀插件代表:
X-PackAnalysis Plugins 分析插件
扩展索引的分析规则,比如各种分词插件
优秀插件代表:
IK Analysis Plugin 中文分词
Japanese(Kuromoji) Analysis plugin 日文分词
PinyinAnalysis Plugin 拼音分词Discovery Plugins 发现插件
通过添加可用于代替Zen Discovery的新发现机制来扩展Elasticsearch 。Ingest Plugins 提取插件
增强每个节点的功能。
优秀插件代表:
Ingest Attachment Processor Plugin 让每个节点都可以处理附件文件Management Plugins 管理插件
管理Es集群
优秀插件代表:X-PackMapper Plugins 映射插件
主要用来扩展es数据类型Scripting Plugins 脚本插件
主要用来扩展es的脚本功能,让es支持使用其他脚本语言。
优秀插件代表:
JavaScript Language
Python LanguageSecurity Plugins 安全插件
扩展es的安全策略,比如控制api的访问权限等
优秀插件代表:X-PackSnapshot/Restore Repository Plugins 快照/还原存储库插件
扩展es的快照和恢复功能Store Plugins 存储插件
扩展es的存储方式,es默认使用的是Lucene存储数据的
优秀插件代表:
Store SMB Windows SMB
2. 插件开发
一 . 建立插件描述文件
es插件描述文件名为 plugin-descriptor.properties
放在 src/main/resources/
目录下,内容如下
属性 | 描述 |
---|---|
name | 插件名字 |
version | 插件版本 |
description | 插件功能描述 |
classname | 插件入口class,完整路径 |
java.version | jdk 版本 |
elasticsearch.version | elasticsearch 版本 |
内容如下,这里都是引用项目的配置属性
version=${project.version}
description=${project.description}
name=${es.plugin.name}
classname=${es.plugin.classname}
java.version=${es.plugin.java.version}
elasticsearch.version=${es.version}
二. pom.xml 配置,已经打包配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.caspar.es.plugin</groupId><artifactId>es-plugin-hello</artifactId><version>5.5.3</version><name>es-plugin-hello</name><description>My first es plugin</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><es.version>5.5.3</es.version><es.plugin.name>es-plugin-hello</es.plugin.name><es.plugin.classname>com.caspar.es.plugin.hello.HelloPlugin</es.plugin.classname><es.plugin.java.version>1.8</es.plugin.java.version></properties><dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${es.version}</version><scope>provided</scope></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>*.properties</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.4</version><configuration><appendAssemblyId>false</appendAssemblyId><descriptors><descriptor>src/main/assemblies/plugin.xml</descriptor></descriptors><finalName>es-plugin-hello</finalName></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
</project>
plugin.xml
里面配置zip的打包配置
<?xml version="1.0"?>
<assembly><id>release</id><formats><format>zip</format></formats><includeBaseDirectory>false</includeBaseDirectory><dependencySets><dependencySet><outputDirectory>/elasticsearch/</outputDirectory><useProjectArtifact>true</useProjectArtifact><useTransitiveDependencies>true</useTransitiveDependencies></dependencySet></dependencySets><files><file><source>target/classes/plugin-descriptor.properties</source><outputDirectory>/elasticsearch/</outputDirectory></file><file><source>src/main/resources/plugin-security.policy</source><outputDirectory>/elasticsearch/</outputDirectory></file></files>
</assembly>
三. 插件入口开发
插件入口需要继承Plugin类,然后实现相应的插件类型接口,去做相应的处理。我们这里实现ActionPlugin接口 实现一个api的插件类型,需要重写getRestHandlers方法,并将自己处理业务逻辑的handler类注册进去
HelloPlugin
内容
package com.caspar.es.plugin.hello;import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.node.DiscoveryNodes;
import org.elasticsearch.common.settings.ClusterSettings;
import org.elasticsearch.common.settings.IndexScopedSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.settings.SettingsFilter;
import org.elasticsearch.plugins.ActionPlugin;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestHandler;import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;/*** @author caspar.chen* @date 2018/9/16**/
public class HelloPlugin extends Plugin implements ActionPlugin {@Overridepublic List<RestHandler> getRestHandlers(Settings settings, RestController restController, ClusterSettings clusterSettings, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver, Supplier<DiscoveryNodes> nodesInCluster) {return Collections.singletonList(new HelloHandler(settings, restController));}}
四. 插件处理Handler,处理具体业务逻辑
HelloHandler
内容
package com.caspar.es.plugin.hello;import org.elasticsearch.client.node.NodeClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.xcontent.XContentBuilder;import org.elasticsearch.rest.*;import java.io.IOException;import java.util.Date;/*** @author caspar* @date 2018/9/16**/public class HelloHandler extends BaseRestHandler {protected HelloHandler(Settings settings, RestController restController) {super(settings);//api的url映射restController.registerHandler(RestRequest.Method.GET, "/_hello", this);}@Overrideprotected BaseRestHandler.RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient nodeClient) throws IOException {//接收的参数System.out.println("params==" + restRequest.params());long t1 = System.currentTimeMillis();String name = restRequest.param("name");long cost = System.currentTimeMillis() - t1;//返回内容,这里返回一个处理业务逻辑的发费时间,前端传的name,以及当前时间。return channel -> {XContentBuilder builder = channel.newBuilder();builder.startObject();builder.field("cost", cost);builder.field("name", name);builder.field("time", new Date());builder.endObject();channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder));};}}
开发好后,执行maven打包,会在target目录生成相应的zip文件。这个就是我们需要的插件包,后面安装插件会用到。
3. 插件管理
查看安装的插件列表
使用list
参数列出安装的所有插件bin/elasticsearch-plugin list
安装插件
使用install
参数安装插件- es 团队维护的核心插件,直接用插件名安装
bin/elasticsearch-plugin install 'plugin name'
- 安装网络上的插件,直接填url地址
bin/elasticsearch-plugin install 'url'
- 安装本地插件,file:// + 本地zip文件地址
bin/elasticsearch-plugin install 'file:///path/to/plugin.zip'
- es 团队维护的核心插件,直接用插件名安装
更新插件
先remove
再install
bin/elasticsearch-plugin remove 'plugin name' bin/elasticsearch-plugin install 'plugin name'
测试插件效果
安装好插件后,需要重启elasticsearch,并且要在每个node上安装重启才有效
安装好后在kibana或者curl GET _hello?name=caspar
会看到返回结果
{"cost": 0,"name": "caspar","time": "2018-09-16T06:09:33.199Z"
}
ElasticSearch es 插件开发相关推荐
- [Elasticsearch] es 6.6 编译报错 SSL peer shut down incorrectly
1.概述 前提:[Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out Mac 编译es 6.8 报错 [ ...
- ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna
ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna 我前一段时间学习的时候ES 还是7.6.x 现在看ES 官网已经到了7.8.X了,迭代维护的速度还是挺 ...
- ElasticSearch(ES)
文章目录 备注.必看 ElasticSearch 和 Solr 介绍,对比 ElasticSearch 7.8. 官网 基本概念 Cluster(集群) 与 Node(节点) Index -索引 索引 ...
- Elasticsearch(ES)的下载与安装
Elasticsearch(ES)的下载与安装 1.安装 Java 在安装 Elasticsearch 之前,我们需要安装并配置好 JDK, 设置好环境变量 $JAVA_HOME. Elasticse ...
- ElasticSearch -- ES 7.x 集群版安装部署
向导 1. ElasticSearch 1.下载 2.配置 3.查看启动状态 4.注册宕机.开机自启 5.如果磁盘是SSD,建议修改IO调度算法 6.SSD磁盘,关闭numa绑核.hugepage 2 ...
- 3.1 ElasticSearch River插件开发
参考资料: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-plugins.html htt ...
- elasticsearch(es)分布式全文检索引擎 简介
0. 带着问题上路-ES是如何产生的? (1)思考:大规模数据如何检索? 如:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 1)用什么数据库好?(MyS ...
- 使用canal同步MySQL数据到Elasticsearch(ES)
目录 1.功能及使用场景 1.1.功能介绍 1.2.使用场景 2.需求引入 3.canal文件下载及准备 3.1 下载文件 3.2 准备文件 4.deployer安装及效果测试 4.1.deploye ...
- [Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out
1.概述 Mac 编译es 6.8 报错 [lcc@lcc ~/IdeaProjects/source_code/elasticsearch]$ ./gradlew assemble Download ...
最新文章
- 【CEO赠书】《精益数据分析》:如何构建数据指标体系
- 成为一名优秀数据分析师的必经之路
- 深入Java核心 Java内存分配原理精讲(3)
- 世界五星级大厨经典菜品集
- 认清业务、技术与软件系统的价值链
- 信号处理与信号产生电路
- 如履薄冰 —— Redis懒惰删除的巨大牺牲
- fatal error: openssl/evp.h: 没有那个文件或目录
- 深入浅出OOP(一): 多态和继承(早期绑定/编译时多态)
- Linux的版本可分为,Linux不同分类标准下的各种版本解读
- centos 6.5 安装 phpmyadmin
- Springboot+Vue+EasyExcel实现web页面的excel下载
- CocosCreator代码混淆加密
- 基于用户的协同过滤Movielens电影推荐系统简单实例
- 【腾讯地图】纯手写微信定位考勤小程序,内附完整源码!
- Redis 进阶笔记
- python中空格怎么打_Python中如何打印空行
- strchr、strstr函数
- 网络RTK无人机上机测试
- 牛顿是人类历史上第二伟大的科学家吗?