es有丰富的插件差不多 可以满平时开发的需求,但出现奇葩需求的时候又不能完全满足,所以就需要自定义开发插件了

目前es有以下几种插件可以去自定义

Analysis Plugins 分析插件

Discovery Plugins 发现插件

Ingest Plugins 提取插件
增强每个节点的功能。

Mapper Plugins 映射插件
主要用来扩展es数据类型

Scripting Plugins 脚本插件

还有ActionPlugin 、searchPlugin、networkPlugin等 他们都是来丰富es功能

代码如下 :

目录结构

新建plugin-descriptor.properties  的描述文件

description=${project.description}version=${project.version}name=${elasticsearch.plugin.name}classname=${elasticsearch.plugin.classname}java.version=${maven.compiler.target}elasticsearch.version=${elasticsearch.version}

属性 描述
name 插件名字
version 插件版本
description 插件功能描述
classname 插件入口class,完整路径
java.version jdk 版本
elasticsearch.version elasticsearch 版本

定义pom文件

<?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"><name>elasticsearch-plugin-test-6.0</name><modelVersion>4.0.0</modelVersion><groupId>org.elasticsearch</groupId><artifactId>elasticsearch-plugin-test-6.0</artifactId><version>${elasticsearch.version}</version><packaging>jar</packaging><description>elastic plugin test</description><properties><elasticsearch.version>6.0.0</elasticsearch.version><maven.compiler.target>1.8</maven.compiler.target><elasticsearch.assembly.descriptor>${project.basedir}/src/main/assemblies/plugin.xml</elasticsearch.assembly.descriptor><elasticsearch.plugin.name>plugin test</elasticsearch.plugin.name><elasticsearch.plugin.classname>org.elasticsearch.plugin.PrintPlugin</elasticsearch.plugin.classname><elasticsearch.plugin.jvm>true</elasticsearch.plugin.jvm></properties><distributionManagement><snapshotRepository><id>oss.sonatype.org</id><url>https://oss.sonatype.org/content/repositories/snapshots</url></snapshotRepository></distributionManagement><dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${elasticsearch.version}</version><scope>compile</scope></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.3</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId><version>1.3</version><scope>test</scope></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-library</artifactId><version>1.3</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies><profiles><profile><id>java8</id><activation><jdk>[1.8,)</jdk></activation><properties><additionalparam>-Xdoclint:none</additionalparam></properties></profile></profiles>
</project>

 自定义actionPlugin

package org.elasticsearch.plugin;import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;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.plugin.handler.PrintPluginHandler;
import org.elasticsearch.plugins.ActionPlugin;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestHandler;public class PrintPlugin extends Plugin implements ActionPlugin {private static String actionProfix = "print";public PrintPlugin() {super();System.out.println(actionProfix + "插件实例化......");}@Overridepublic List<RestHandler> getRestHandlers(Settings settings, RestController restController,ClusterSettings clusterSettings, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter,IndexNameExpressionResolver indexNameExpressionResolver, Supplier<DiscoveryNodes> nodesInCluster) {return Collections.singletonList(new PrintPluginHandler(settings, restController));}}  

actionPlugin的业务实现

package org.elasticsearch.plugin.handler;import java.io.IOException;
import java.util.Date;import org.elasticsearch.client.node.NodeClient;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestRequest.Method;
import org.elasticsearch.rest.RestStatus;public class PrintPluginHandler extends BaseRestHandler {private String printName = "printPluginTest"; @Injectpublic PrintPluginHandler(Settings settings, RestController restController) {super(settings);restController.registerHandler(Method.GET, "print", this);// 注册}@Overridepublic String getName() {return printName;}/*** 处理业务逻辑*/@Overrideprotected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {// 接收的参数System.out.println("params==" + request.params());long t1 = System.currentTimeMillis();String name = request.param("name");long cost = System.currentTimeMillis() - t1;// 返回内容,这里返回消耗时间 请求参数 插件名称return channel -> {XContentBuilder builder = channel.newBuilder();builder.startObject();builder.field("cost", cost);builder.field("name", name);builder.field("time", new Date());builder.field("pluginName",printName);builder.field("print","this is print plugin test");builder.endObject();channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder));}; }}

 1、写完之后 执行 mvn clean package

 2、找到elasticsearch-plugin-test-6.0-6.0.0.zip 文件 将文件解压到es的plugins文件下

 3、启动es

浏览器中输入 http://192.168.88.116:9200/print?name=1

git地址:https://github.com/wangnanhui/elastic-plugin-test

还可以自定义一个内存消耗本节点的内存消耗,磁盘占用等 很是方便

转载于:https://www.cnblogs.com/wangnanhui/articles/10413066.html

ElasticSearch 插件开发相关推荐

  1. 【es】ElasticSearch 插件开发

    1.概述 转载:https://www.cnblogs.com/wangnanhui/articles/10413066.html [Elasticsearch]es 插件类型 elasticsear ...

  2. Elasticsearch插件开发之自定义搜索语法

    搜索查询--自定义查询 源码 自定义一种查询,类似于 terms terms 查询的写法入下 {"terms": {"id": [1, 3]} } 我们定义一种 ...

  3. 云计算平台(检索篇)-Elasticsearch

    前段时间为公司基于Elasticsearch(下面简称ES)做了一套检索平台,下面将这段时间积累的一些知识与大家分享,如有不对之处,欢迎大家多多批评与建议.针对Elasticsearch由于东西还是比 ...

  4. Elasticsearch 学习路线

    搜索引擎认知 搜索引擎是什么 所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术. 搜索引擎是指根据一定的策略.运用特定的计算机程序从互联网上采集信息 ...

  5. 3.1 ElasticSearch River插件开发

    参考资料: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-plugins.html htt ...

  6. ElasticSearch es 插件开发

    ElasticSearch es 插件开发 1. 插件分类 API Extension Plugins API扩展插件 通过添加新的API或功能向Elasticsearch添加新功能,通常与搜索或映射 ...

  7. ELK(Logstash+Elasticsearch+Kibana)的原理和详细搭建

    一. Elastic Stack Elastic Stack是ELK的官方称呼,网址:https://www.elastic.co/cn/products ,其作用是"构建在开源基础之上, ...

  8. Elasticsearch 实例管理在京东的使用场景及演进之路

    Elasticsearch 是一个开源的分布式 RElasticsearchTful 搜索引擎,作为一个分布式.可扩展.实时的搜索与数据分析引擎,它可以快速存储.搜索和分析大量数据.同时,Elasti ...

  9. ElasticSearch5.3插件开发(二)获取集群健康信息

    前面一篇,简单讲过插件开发,打印信息,今天我们开发一个有实际意义的插件,获得集群健康信息. 先看代码 MyFirstPlugin.java package es.plugins; import org ...

最新文章

  1. Andriod监听支付宝收款实现个人支付宝支付接口!附安卓App
  2. hdu5387(模拟)
  3. Java千万数据导入mysql_java之5分钟插入千万条数据
  4. qotd服务_QOTD:Java线程与Java堆空间
  5. 云计算精华问答 | 边缘计算、雾计算、霾计算,它们究竟是什么?
  6. 探讨 .NET 4 新增的 SortedSet 类
  7. 移除span的html,从最后一个span元素的伪元素内容中移除::
  8. linux下淘宝安全控件问题
  9. linux mate桌面主题下载_5个适用于Linux的最佳图标主题
  10. c语言无法定位程序输入点 于动态链接库,无法定位程序输入点于动态链接库?解决方法步骤...
  11. 从全球制造业的迁移史,看中国制造业未来会怎么走?
  12. 李志敏 华中农业大学计算机学院,华中农业大学计算机教育论坛举行
  13. HDU 6447 YJJ's Salesman (dp+树状数组+莫干山算法)
  14. air android 后台运行,AIR Android:使用模拟器运行程序
  15. 运维学习 unit 5 用户的建立与管理
  16. 输入一个字符串,判断其是否为回文串。
  17. php.ini 配置composer,composer安装配置
  18. C++11 强类型枚举和普通枚举
  19. FFmpeg -- 解码视频
  20. 马云质押阿里巴巴股票寻求贷款,要有大动作?旧闻新炒!

热门文章

  1. LeetCode 98 验证二叉搜索树
  2. A5如何备份oracle数据库,oracle的数据库的导入导出
  3. 【基础】算法的时间复杂度分析
  4. python数据结构教程_python入门基础教程随笔1-python数据结构-列表
  5. 怎么判断第几范式例题_学完就忘、做题就懵!初级会计怎么备考才能更高效?...
  6. 全志 a33 linux qt,全志A33 lichee 搭建Qt App开发环境编写helloworld
  7. 最长回文子串manacher算法模板
  8. 线性表部分知识点小结
  9. 九大背包问题专题--混合背包问题(状态转移)
  10. Codeforces Round #383 (Div. 1): D. Arpa’s letter-marked tree…(dsu on tree+状压)