ElasticSearch系列十二:掌握ES使用Java API

2023-11-08

一、Java连接ElasticSearch6.x版本(可整合到spring中)
    <dependencies>
        <!-- ES -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.2.4</version>
        </dependency>
        <!--  es升级需要依赖的 -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.2.4</version>
        </dependency>
        <!--ES用到的日志-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.7</version>
        </dependency>
        <!--Json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.35</version>
        </dependency>
    </dependencies>
package com.neusoft;

import java.io.Serializable;
/**
 * @author XiaoLuo
 * @date 2018/6/15 15:04
 * @Description: ES基本信息实体类
 */
public class EsBeanParent implements Serializable {
    String indexName;
    String indexType;
    int shards;
    int replicas;
    String refreshInterval;
    String indexStoreType;
    String alias;
    boolean autoCreateIndex;
    String primaryFiled;

    public EsBeanParent() {
    }

    public String getIndexName() {
        return this.indexName;
    }

    public void setIndexName(String indexName) {
        this.indexName = indexName;
    }

    public String getIndexType() {
        return this.indexType;
    }

    public void setIndexType(String indexType) {
        this.indexType = indexType;
    }

    public int getShards() {
        return this.shards;
    }

    public void setShards(int shards) {
        this.shards = shards;
    }

    public int getReplicas() {
        return this.replicas;
    }

    public void setReplicas(int replicas) {
        this.replicas = replicas;
    }

    public String getRefreshInterval() {
        return this.refreshInterval;
    }

    public void setRefreshInterval(String refreshInterval) {
        this.refreshInterval = refreshInterval;
    }

    public String getIndexStoreType() {
        return this.indexStoreType;
    }

    public void setIndexStoreType(String indexStoreType) {
        this.indexStoreType = indexStoreType;
    }

    public String getAlias() {
        return this.alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }

    public boolean isAutoCreateIndex() {
        return this.autoCreateIndex;
    }

    public void setAutoCreateIndex(boolean autoCreateIndex) {
        this.autoCreateIndex = autoCreateIndex;
    }

    public String getPrimaryFiled() {
        return this.primaryFiled;
    }

    public void setPrimaryFiled(String primaryFiled) {
        this.primaryFiled = primaryFiled;
    }
}
package com.neusoft;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author XiaoLuo
 * @date 2018/6/15 15:04
 * @Description: 创建连接封装类
 */
public class EsClientFactory {

	private static final String SCHEMA = "http";
	private static final int CONNECT_TIME_OUT = 1000;
	private static final int SOCKET_TIME_OUT = 30000;
	private static final int CONNECTION_REQUEST_TIME_OUT = 500;

	private static final int MAX_CONNECT_NUM = 100;
	private static final int MAX_CONNECT_PER_ROUTE = 100;

	private static HttpHost HTTP_HOST=null;
	private static boolean uniqueConnectTimeConfig = false;
	private static boolean uniqueConnectNumConfig = true;
	private static RestClientBuilder builder;
	private static RestHighLevelClient restHighLevelClient;

	public static void init(){
		if(HTTP_HOST==null){
			HTTP_HOST=new HttpHost("127.0.0.1",9200,SCHEMA);
		}
		builder = RestClient.builder(HTTP_HOST);
		if(uniqueConnectTimeConfig){
			setConnectTimeOutConfig();
		}
		if(uniqueConnectNumConfig){
			setMutiConnectConfig();
		}
		restHighLevelClient = new RestHighLevelClient(builder);
	}

	/**
	 * 主要关于异步httpclient的连接延时配置
	 */
	public static void setConnectTimeOutConfig(){
		builder.setRequestConfigCallback(requestConfigBuilder -> {
			requestConfigBuilder.setConnectTimeout(CONNECT_TIME_OUT);
			requestConfigBuilder.setSocketTimeout(SOCKET_TIME_OUT);
			requestConfigBuilder.setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT);
			return requestConfigBuilder;
		});
	}


	/**
	 * 主要关于异步httpclient的连接数配置
	 */
	public static void setMutiConnectConfig(){
		builder.setHttpClientConfigCallback(httpClientBuilder -> {
			httpClientBuilder.setMaxConnTotal(MAX_CONNECT_NUM);
			httpClientBuilder.setMaxConnPerRoute(MAX_CONNECT_PER_ROUTE);
			return httpClientBuilder;
		});
	}

	public static RestHighLevelClient getHighLevelClient(){
		if(restHighLevelClient==null){
			init();
		}
		return restHighLevelClient;
	}

	public static void close() {
		if (restHighLevelClient != null) {
			try {
				restHighLevelClient.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 单个插入
	 * @return
	 */
	public static Object postRequest(Map entity, EsBeanParent esBeanParent){
		try {
			// 构建请求
			IndexRequest request = new IndexRequest(esBeanParent.getIndexName(), esBeanParent.getIndexType(),esBeanParent.getPrimaryFiled());
			// 将保存数据以JSON格式关联到请求
			String jsonString = JSONObject.toJSONString(entity);
			request.source(jsonString,XContentType.JSON);
			// Java客户端发起保存数据请求
			IndexResponse response = getHighLevelClient().index(request);
			return "ok";
		}catch (Exception e){
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取单个
	 * @param id
	 * @param esBeanParent
	 * @return
	 */
	public static String getSourceRequest(String id, EsBeanParent esBeanParent){
		try {
			GetRequest getRequest = new GetRequest(esBeanParent.getIndexName(), esBeanParent.getIndexType(), id);
			GetResponse getResponse = getHighLevelClient().get(getRequest);
			return getResponse.getSourceAsString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 批量插入
	 * @param list
	 * @param esBeanParent
	 * @return
	 */
	public static Object bulkRequest(List<Map> list, EsBeanParent esBeanParent){
		BulkRequest bulkRequest = new BulkRequest();
		for (Map map : list) {
			IndexRequest indexRequest = new IndexRequest(esBeanParent.getIndexName(), esBeanParent.getIndexType(),esBeanParent.getPrimaryFiled());
			indexRequest.source(map);
			bulkRequest.add(indexRequest);
		}
		try {
			BulkResponse bulkResponse = getHighLevelClient().bulk(bulkRequest);
			return "ok";
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 单个修改
	 * @return
	 */
	public static Object updateRequest(Map entity, EsBeanParent esBeanParent){
		Object id = entity.get(esBeanParent.getPrimaryFiled());
		try {
			RestHighLevelClient client = getHighLevelClient();
			UpdateRequest updateRequest = new UpdateRequest(esBeanParent.getIndexName(), esBeanParent.getIndexType(), id.toString());
			updateRequest.doc(entity);
			UpdateResponse updateResponse = client.update(updateRequest);
			return "ok";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 测试方法
	 * @param args
	 */
	public static void main(String[] args) {
		EsBeanParent esBeanParent = new EsBeanParent();
		esBeanParent.setIndexName("company");
		esBeanParent.setIndexType("employee");
		esBeanParent.setPrimaryFiled("1");
		Map map = new HashMap();
		map.put("id","1");
		map.put("name","xiaoluo");
		postRequest(map, esBeanParent);
		String sourceRequest = getSourceRequest("1", esBeanParent);
		System.out.println(sourceRequest);
	}
}
二、点击查看博客中的SpringBoot整合ElasticSearch
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch系列十二:掌握ES使用Java API 的相关文章

随机推荐

  • Vue和React的优缺点

    Vue和React是目前最流行的前端框架之一 它们都有自己的优点和缺点 在这篇文章中 我将会详细介绍Vue和React的优缺点 并给出一些建议 帮助你选择适合自己的框架 一 Vue的优点 1 简单易学 Vue的语法简单易懂 学习曲线较为平缓
  • 关于U盘制作启动盘后内存变小问题的解决

    不需任何工具 只需要输入几个简单命令即可 1 U盘插入电脑然后运行windows的命令窗口 命令窗口打开方式win R后输入 cmd或点击开始菜单 gt gt 运行 gt gt 输入cmd 2 在命令行输入diskpart然后回车 如图所示
  • 爬虫爬取mp3文件例子

    相信训练模型时数据集的获取也是一个很头疼的事情 搞cv领域的可以扛着摄像头架起三脚架拍摄获取 以前干过 但是如果是nlp领域的呢 特别是chatgpt等大模型出来后对这类文本等数据的需求更大 如果没有现成的数据集的话基本上很难自己创造数据
  • vue自定义指令实现按钮鉴权

    vue中提供了创建自定义指令api directives 一般接口返回权限表如下 在路由守卫中用户登录情况下获取权限 并提交mutations存储在 vuex中 ajax获取菜单数据 let menuList permissions awa
  • vant+vue3+ts 的滑块验证

    vant vue3 ts 的滑块验证 效果图
  • SpringBoot可执行包结构

    相对于传统的JAVA可执行包 jar文件 SpringBoot的包结构有比较大的不一样 标准的JDK定义的jar文件里面是不能够有内嵌jar文件的 所以通常我们在执行一个jar文件里面的应用程序时 还需要通过 classpath来告诉JDK
  • Atcoder beginner contest 303

    A Similar String AC代码 include
  • 动物森友会【科大讯飞杯L题】【二分答案+最大流】

    题目链接 有N个物品 一周有7天 然后呢 要对应的每个物品都要达到各自的需求数量 于是问 最少需要几天才可以达到要求 很明显的 这是线性关系的 我们可以用二分答案来解决这个问题 然后呢怎么知道是否满足条件也就是来确定的 要满足每个物品都要拿
  • [Unity3D]第一人称角色控制器

    Unity3D 最简单最详细的第一人称角色控制器 自学Unity3D有一段时间了 一直想弄一个第一人称角色控制器 网上还是有很多教程和资料 但感觉有很多教程和资料理解起来比较复杂 在这里我结合网上所学的知识自己写了一个比较容易理解的Unit
  • python爬虫归纳_【知识归纳】史上最全的Python爬虫抓取技巧总结

    原标题 知识归纳 史上最全的Python爬虫抓取技巧总结 一 最基本的抓站 import urllib2 content urllib2 urlopen http XXXX read 二 使用代理服务器 这在某些情况下比较有用 比如IP被封
  • Java-代码审核CodeReview要点总结

    1 颗粒度划分要细 例如 当分组循环一个请求一个服务时 如果其中的一个请求抛出异常 应该在catch中捕获 记录错误日志 让循环继续进行 2 非空判断和边境检查 对数组和集合的判断 对map的key值判断 对list的值得判断 3 错误码和
  • Python中list转换为numpy数组出现的问题

    问题为 现有的数据list LuKou train DF KnownCameraTrajec 是一个1000000 30的list数据类型 使用np array list LuKou train DF KnownCameraTrajec 转
  • Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager

    在最近创建新项目时遇到如题的错误 在重新删除build tools 31版本后还是报错 其实不需要将SDK构建工具从31降为30或更改编译SDK版本 主要问题是SDK build tools31 缺少两个文件 dx bat dx jar 解
  • 记一次SpringBoot项目的Invalid bound statement (not found)错误

    目录 一 前言 二 解决方案 1 第一种 语法错误 2 第二种 编译错误 3 第三种 配置错误 4 第四种 粗心大意 三 写在后面 一 前言 今天写项目的过程中突然报错 Invalid bound statement not found 百
  • 项目启动报错信息:java.lang.NoClassDefFoundError: org/apache/commons/el/Logger

    注 仅供参考 个人运行项目时遇到的问题和解决方案 希望可以给大家带来一丢思路 并非普适性 问题描述 启动tomcat时报错 项目未运行成功 具体报错 十月 18 2021 9 10 11 下午 org apache catalina cor
  • Fmask算法——影像云检测算法

    总结Fmask算法的学习资料 1 经典论文 1 Object based cloud and cloud shadow detection in Landsat imagery 2 Improved cloud and cloud shad
  • 如何建立异地容灾备份体系

    GB T22239 2019 信息安全技术 网络安全等级保护基本要求 即等保2 0 已于2019 12 1 正式实施 其中第二级安全通用要求 应提供异地数据备份功能 利用通信网络能将重要数据定时批量传送至备用场地 第四级安全通用要求 应建立
  • Matlab画图 常用功能及属性设置脚本

    一 plot使用脚本 常规设置 1 线型 颜色 宽度 2 legend 字体 字号 位置 3 label 字体 字号 4 title 字体 字号 加粗 5 gca 边框宽度 坐标轴字体 坐标轴范围 网格 x linspace 0 2 pi
  • 万字长文详解特斯拉自动驾驶体系(感知/规控/标注/仿真)

    作者 和君 编辑 禾隐记 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 全栈算法 技术交流群 汽车革命的上半场是电动化 下半场是智能化 电动化只是改变了汽车的动力供给方式 并没有改变汽车的性质
  • ElasticSearch系列十二:掌握ES使用Java API

    一 Java连接ElasticSearch6 x版本 可整合到spring中