当前位置: 首页 > news >正文

ES客户端RestHighLevelClient的使用

1 RestHighLevelClient介绍

默认情况下,ElasticSearch使用两个端口来监听外部TCP流量。

  • 9200端口:用于所有通过HTTP协议进行的API调用。包括搜索、聚合、监控、以及其他任何使用HTTP协议的请求。所有的客户端库都会使用该端口与ElasticSearch进行交互。
  • 9300端口:是一个自定义的二进制协议,用于集群中各节点之间的通信。用于诸如集群变更、主节点选举、节点加入/离开、分片分配等事项。

RestHighLevelClient是ES的Java客户端,它是通过HTTP与ES集群进行通信。

2 引入ES依赖

<!--引入es-high-level-client相关依赖  start-->
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.10.0</version>
</dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.10.0</version>
</dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.10.0</version>
</dependency>
<!--引入es-high-level-client相关依赖  end-->

3 使用

3.1 es的配置

# es配置
# es用户名
elasticsearch.userName=elastic
# es密码
elasticsearch.password=elastic
# es host ip 地址(集群),多个以","间隔
elasticsearch.hosts=127.0.0.1:9200
# es 请求方式
elasticsearch.scheme=http
# es 连接超时时间(ms)
elasticsearch.connectTimeOut=1000
# es socket 连接超时时间(ms)
elasticsearch.socketTimeOut=30000
# es 请求超时时间(ms)
elasticsearch.connectionRequestTimeOut=500
# es 最大连接数
elasticsearch.maxConnectNum=100
# es 每个路由的最大连接数
elasticsearch.maxConnectNumPerRoute=100

3.2 es客户端配置类

/*** restHighLevelClient 客户端配置类**/
@Slf4j
@Data
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticsearchConfig {/*** es host ip 地址(集群)*/private String hosts;/*** es用户名*/private String userName;/*** es密码*/private String password;/*** es 请求方式*/private String scheme;/*** es 连接超时时间*/private int connectTimeOut;/*** es socket 连接超时时间*/private int socketTimeOut;/*** es 请求超时时间*/private int connectionRequestTimeOut;/*** es 最大连接数*/private int maxConnectNum;/*** es 每个路由的最大连接数*/private int maxConnectNumPerRoute;/*** 如果@Bean没有指定bean的名称,那么方法名就是bean的名称*/@Bean(name = "restHighLevelClient")public RestHighLevelClient restHighLevelClient() {// 构建连接对象RestClientBuilder builder = RestClient.builder(getEsHost());// 连接延时配置builder.setRequestConfigCallback(requestConfigBuilder -> {requestConfigBuilder.setConnectTimeout(connectTimeOut);requestConfigBuilder.setSocketTimeout(socketTimeOut);requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);return requestConfigBuilder;});// 连接数配置builder.setHttpClientConfigCallback(httpClientBuilder -> {httpClientBuilder.setMaxConnTotal(maxConnectNum);httpClientBuilder.setMaxConnPerRoute(maxConnectNumPerRoute);httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());return httpClientBuilder;});return new RestHighLevelClient(builder);}private HttpHost[] getEsHost() {// 拆分地址(es为多节点时,不同host以逗号间隔)List<HttpHost> hostLists = new ArrayList<>();String[] hostList = hosts.split(",");for (String addr : hostList) {String host = addr.split(":")[0];String port = addr.split(":")[1];hostLists.add(new HttpHost(host, Integer.parseInt(port), scheme));}// 转换成 HttpHost 数组return hostLists.toArray(new HttpHost[]{});}private CredentialsProvider getCredentialsProvider() {// 设置用户名、密码CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));return credentialsProvider;}
}

3.3 es的使用

3.3.1 创建es索引

3.3.1.1 创建es索引的工具类

创建es索引的工具类如下所示。

/*** 操作ES索引**/
@Slf4j
@Service
public class EsIndexOperation {@Resourceprivate RestHighLevelClient restHighLevelClient;private final RequestOptions options = RequestOptions.DEFAULT;/*** 判断索引是否存在*/public boolean checkIndex(String index) {try {return restHighLevelClient.indices().exists(new GetIndexRequest(index), options);} catch (Exception e) {log.error("EsIndexOperation checkIndex error.", e);}return Boolean.FALSE;}/*** 创建索引** @param indexName         es索引名* @param esSettingFilePath es索引的alias、settings和mapping的配置文件*/public boolean createIndex(String indexName, String esSettingFilePath) {String aliases = null;String mappings = null;String settings = null;if (StringUtils.isNotBlank(esSettingFilePath)) {try {String fileContent = FileUtils.readFileContent(esSettingFilePath);if (StringUtils.isNotBlank(fileContent)) {JSONObject jsonObject = JSON.parseObject(fileContent);aliases = jsonObject.getString("aliases");mappings = jsonObject.getString("mappings");settings = jsonObject.getString("settings");}} catch (Exception e) {log.error("createIndex error.", e);return false;}}if (checkIndex(indexName)) {log.error("createIndex indexName:[{}]已存在", indexName);return false;}CreateIndexRequest request = new CreateIndexRequest(indexName);if ((StringUtils.isNotBlank(aliases))) {request.aliases(aliases, XContentType.JSON);}if (StringUtils.isNotBlank(mappings)) {request.mapping(mappings, XContentType.JSON);}if (StringUtils.isNotBlank(settings)) {request.settings(settings, XContentType.JSON);}try {this.restHighLevelClient.indices().create(request, options);return true;} catch (IOException e) {log.error("EsIndexOperation createIndex error.", e);return false;}}/*** 删除索引*/public boolean deleteIndex(String indexName) {try {if (checkIndex(indexName)) {DeleteIndexRequest request = new DeleteIndexRequest(indexName);AcknowledgedResponse response = restHighLevelClient.indices().delete(request, options);return response.isAcknowledged();}} catch (Exception e) {log.error("EsIndexOperation deleteIndex error.", e);}return Boolean.FALSE;}
}
3.3.1.2 读取文件的工具类
/*** 文件操作类*/
@Slf4j
public class FileUtils {/*** 读取项目resources文件夹下的文件** @param filePath 文件路径* @return 文件内容*/public static String readFileContent(String filePath) {try {BufferedReader reader = new BufferedReader(new FileReader(filePath));String line;StringBuilder stringBuilder = new StringBuilder();while ((line = reader.readLine()) != null) {stringBuilder.append(line);}reader.close();return stringBuilder.toString();} catch (IOException e) {log.error("readFileContent error.", e);}return null;}public static void main(String[] args) {String filePath = "src/main/resources/es/mappings_test20231216.txt";String fileContent = readFileContent(filePath);}}
3.3.1.3 测试创建es索引

(1)在“resources”文件夹下创建es索引的配置文件

配置文件内容如下所示。

{"aliases": {"test": {}},"mappings": {"properties": {"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"address": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}},"settings": {"index": {"number_of_shards": "1","number_of_replicas": "1"}}
}

(2)读取es索引的配置文件,创建es索引

    @Testpublic void createIndex() {String indexName = "test_1216";String filePath = "src/main/resources/es/mappings_test20231216.txt";boolean b = esIndexOperation.createIndex(indexName, filePath);Assert.assertTrue(b);}

(3)查看创建结果

通过命令 GET /test 查看es索引创建结果,结果如下所示。

{"test_1216" : {"aliases" : {"test" : { }},"mappings" : {"properties" : {"address" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"name" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}},"settings" : {"index" : {"routing" : {"allocation" : {"include" : {"_tier_preference" : "data_content"}}},"number_of_shards" : "1","provided_name" : "test_1216","creation_date" : "1702723364945","number_of_replicas" : "1","uuid" : "RCAhqjPZSG-n4fse3cot4A","version" : {"created" : "7100099"}}}}
}

4 参考文献

(1)elasticsearch学习(七):es客户端RestHighLevelClient_炎升的博客

(2)中间件:ElasticSearch组件RestHighLevelClient用法详解

(3)java api 实现es中的索引管理_createindexrequest

相关文章:

ES客户端RestHighLevelClient的使用

1 RestHighLevelClient介绍 默认情况下&#xff0c;ElasticSearch使用两个端口来监听外部TCP流量。 9200端口&#xff1a;用于所有通过HTTP协议进行的API调用。包括搜索、聚合、监控、以及其他任何使用HTTP协议的请求。所有的客户端库都会使用该端口与ElasticSearch进行交互。…...

GitHub入门命令介绍

GitHub是当今最受欢迎的代码托管平台之一&#xff0c;它提供了强大的版本控制和协作功能。 对于初学者来说&#xff0c;熟悉GitHub的基本命令非常重要。下面介绍一些常用的GitHub命令。 一、安装Git 1. Windows系统&#xff1a;在Windows上使用GitHub之前&#xff0c;您需要先…...

EasyExcel 简单导入

前边写过使用easyexcel进行简单、多sheet页的导出。今天周日利用空闲写一下对应简单的导入。 重点&#xff1a;springboot、easyExcel、桥接模式&#xff1b; 说明&#xff1a;本次使用实体类student&#xff1a;属性看前边章节内容&#xff1b; 1、公共导入service public …...

Termux搭建nodejs环境

安装nodejs ~ $ pkg install nodejs使用http-server搭建文件下载服务 先安 http-server 并启动 # 安装 http-server 包 ~ $ npm install -g http-server# 启动 http-server 服务 ~ $ http-server Starting up http-server, serving ./http-server version: 14.1.1http-serve…...

喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例

12月6日&#xff0c;浙江省经信厅公示了2023年浙江省信息技术应用创新典型案例入围名单。本次案例征集活动&#xff0c;由浙江省经信厅、省密码管理局、工业和信息化部网络安全产业发展中心联合组织开展&#xff0c;共遴选出24个优秀典型解决方案&#xff0c;迪捷软件“基于全数…...

C语言连接zookeeper客户端(不能完全参考官网教程)

准备过程 1.通过VStudio 远程连接linux的开发环境&#xff1b; 2.g环境&#xff0c;通过MingW安装&#xff1b; 3.必须要安装好pthread.h的环境&#xff0c;不管是windows端&#xff08;linux 可视化端开发就不管这个&#xff09;还是linux端&#xff1b; 4.需要准备zookeeper…...

python排序

0. 背景 Python排序功能十分强大&#xff0c;可以进行基本排序或自定义排序。Python中提供两种不同的排序方法对各种各样的数据类型进行排序。 1. 使用sorted()函数排序 排序主要是对相同数据类型的元素进行的&#xff0c;包括数值和字符串两种数据类型。 1.1 对数值进行排…...

【Spark精讲】Spark Shuffle详解

目录 Shuffle概述 Shuffle执行流程 总体流程 中间文件 ShuffledRDD生成 Stage划分 Task划分 Map端写入(Shuffle Write) Reduce端读取(Shuffle Read) Spark Shuffle演变 SortShuffleManager运行机制 普通运行机制 bypass 运行机制 Tungsten Sort Shuffle 运行机制…...

【C++初阶】八、初识模板(泛型编程、函数模板、类模板)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【C初阶】七、内存管理 &#xff08;C/C内存分布、C内存管理方式、operator new / delete 函数、定位new表达式&#xff09; -CSDN博客 目录 一 . 泛型编程 二 . 函数模板 函数模板…...

珠海数字孪生赋能工业智能制造,助力制造业企业数字化转型

珠海数字孪生赋能工业智能制造&#xff0c;助力制造业企业数字化转型。数字孪生是利用物理模型、传感器更新及运行历史数据&#xff0c;集成多物理量、多尺度的仿真过程。巨蟹数科数字孪生通过构建物理车间与虚拟车间之间的有效映射并实时反馈机制&#xff0c;实现物理车间与虚…...

HarmonyOS开发实战:如何实现一个运动排名榜页面

HarmonyOS开发实战&#xff1a;如何实现一个运动排名榜页面 代码仓库&#xff1a; 运动排名榜页面 项目介绍 本项目使用声明式语法和组件化基础知识&#xff0c;搭建一个可刷新的排行榜页面。在排行榜页面中&#xff0c;使用循环渲染控制语法来实现列表数据渲染&#xff0c;…...

2019年第八届数学建模国际赛小美赛D题安全选举的答案是什么解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 D题 安全选举的答案是什么 原题再现&#xff1a; 随着美国进入一场关键性的选举&#xff0c;在确保投票系统的完整性方面进展甚微。2016年总统大选期间&#xff0c;唐纳德特朗普因被指控受到外国干涉而入主白宫&#xff0c;这一问题再次成为…...

vivado 创建实施约束

创建实施约束 在您有了一个合成的网表之后&#xff0c;您可以将它与XDC文件一起加载到内存中&#xff0c;或者Tcl脚本已启用以进行实现。当加载XDC以便验证和更正任何不能应用的约束。在某些情况下&#xff0c;合成网表中的对象名称与精心设计。如果是这种情况&#xff0c;则必…...

【代码分析】MPI

代码解读 问题 model/AdaMPI.py:21 为什么下降分辨率model.CPN.unet.FeatMaskNetwork 为什么用的是mask&#xff0c;unet&#xff1f; MPI class MPIPredictor(nn.Module):def __init__(self,width384,height256,num_planes64,):super(MPIPredictor, self).__init__()self.…...

数字孪生Web3D智慧机房可视化运维云平台建设方案

前言 进入信息化时代&#xff0c;数字经济发展如火如荼&#xff0c;数据中心作为全行业数智化转型的智慧基座&#xff0c;重要性日益凸显。与此同时&#xff0c;随着东数西算工程落地和新型算力网络体系构建&#xff0c;数据中心建设规模和业务总量不断增长&#xff0c;机房管理…...

飞天使-docker知识点12-docker-compose

文章目录 docker-compose命令启动单个容器重启容器停止和启动容器停止和启动所有容器演示一个简单示范 docker-compose 部署有依赖问题 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您使用简单的 YAML 文件来配置应用程序的服务、网络和存储等方…...

快速排序(一)

目录 快速排序&#xff08;hoare版本&#xff09; 初级实现 问题改进 中级实现 时空复杂度 高级实现 三数取中 快速排序&#xff08;hoare版本&#xff09; 历史背景&#xff1a;快速排序是Hoare于1962年提出的一种基于二叉树思想的交换排序方法 基本思想&#xff1a…...

GO的sql注入盲注脚本

之间学习了go的语法 这里就开始go的爬虫 与其说是爬虫 其实就是网站的访问如何实现 因为之前想通过go写sql注入盲注脚本 发现不是那么简单 这里开始研究一下 首先是请求网站 这里貌似很简单 package mainimport ("fmt""net/http" )func main() {res, …...

写好ChatGPT提示词原则之:清晰且具体(clear specific)

ChatGPT 的优势在于它允许用户跨越机器学习和深度学习的复杂门槛&#xff0c;直接利用已经训练好的模型。然而&#xff0c;即便是这些先进的大型语言模型也面临着上下文理解和模型固有局限性的挑战。为了最大化这些大型语言模型&#xff08;LLM&#xff09;的潜力&#xff0c;关…...

Java实现快速排序及其动图演示

快速排序&#xff08;Quicksort&#xff09;是一种基于分治思想的排序算法。它通过选择一个基准元素&#xff0c;将数组分为两个子数组&#xff0c;其中一个子数组的所有元素都小于基准元素&#xff0c;另一个子数组的所有元素都大于基准元素&#xff0c;然后递归地对这两个子数…...

iClient3D 图元操作

1. S3MTilesLayer&#xff0c;S3M(Spatial 3D Model)图层类 S3MTilesLayer&#xff0c;S3M(Spatial 3D Model)图层类&#xff0c;通过该图层实现加载三维切片缓存&#xff0c;包括倾斜摄影模型、BIM模型、点云数据、精细模型、矢量数据、符号等。 那S3MTilesLayer中针对图元的…...

从0到1!开发小白快速入门腾讯云数据库

在这个海量数据大爆发的时代&#xff0c;一个单一的开源数据库产品往往很难直接满足企业的业务需求&#xff0c;在某些场景下&#xff0c;无论是性能、安全还是稳定性&#xff0c;都面临着各种各样的问题。 你在工作中也有这样的烦恼的话&#xff0c;一定是因为你还没有使用过…...

Golang清晰代码指南

发挥易读和易维护软件的好处 - 第一部分 嗨&#xff0c;开发者们&#xff0c;清晰的代码是指编写易于阅读、理解和维护的软件代码。它是遵循一组原则和实践&#xff0c;优先考虑清晰性、简单性和一致性的代码。清晰的代码旨在使代码库更易管理&#xff0c;减少引入错误的可能性…...

C语言 文件I/O(备查)

所有案列 跳转到其他。 文件打开 FILE* fopen(const char *filename, const char *mode); 参数&#xff1a;filename&#xff1a;指定要打开的文件名&#xff0c;需要加上路径&#xff08;相对、绝对路径&#xff09;mode&#xff1a;指定文件的打开模式 返回值&#xff1a;成…...

web(HTML之表单练习)

使用HTML实现该界面&#xff1a; 要求如下&#xff1a; 用户名为文本框&#xff0c;名称为 UserName&#xff0c;长度为 15&#xff0c;最大字符数为 20。 密码为密码框&#xff0c;名称为 UserPass&#xff0c;长度为 15&#xff0c;最大字符数为 20。 性别为两个单选按钮&a…...

通过对象轮换实现 LRU 缓存结构

文章目录 通过两个对象轮换&#xff0c;按照是否访问实现内容长久保存rollup 的缓存实现 export default function (max) { //max 缓存容量var num, curr, prev;var limit max || 1;function keep(key, value) {if (num > limit) {prev curr; // 超过容量时当前对象变成缓…...

【Unity动画】综合案例完结-控制角色动作播放+声音配套

这个案例实现的动作并不复杂&#xff0c;主要包含一个 跳跃动作、攻击动作、还有一个包含三个动画状态的动画混合树。然后设置三个参数来控制切换。 状态机结构如下&#xff1a; 完整代码 using System.Collections; using System.Collections.Generic; using UnityEngine;pu…...

【工作流Activiti】任务组

1、Candidate-users候选人 1.1、需求 在流程定义中在任务结点的assignee固定设置任务负责人&#xff0c;在流程定义时将参与者固定设置在.bpmn文件中&#xff0c;如果要临时变更任务负责人则需要修改流程定义&#xff0c;系统扩展性很差&#xff0c;针对这种情况&#xff0c;我…...

桌面概率长按键盘无法连续输入问题

问题描述&#xff1a;概率性长按键盘无法连续输入文本 问题定位&#xff1a; 系统按键流程分析 图一 系统按键流程 按键是由X Server接收的&#xff0c;这一点只要明白了X Window的工作机制就不难理解了。X Server在接收到按键后&#xff0c;会转发到相应程序的窗口中。在窗…...

用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式

1、模式标准 模式名称&#xff1a;备忘录模式 模式分类&#xff1a;行为型 模式意图&#xff1a;在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态 结构图&#xff1a; 适用于&#xff1a; …...

做财务还是网站运营/网址导航大全

一.前言 最近再做一个VR项目,里面有大量的剧情和VR操作任务。 比如: 1.张三说了什么话,干了什么事,然后,李四又说了什么,做了什么动画,完了之后,场景中某个物体高亮,让我们触摸或者射线点击(pc的话鼠标点击)和其发生交互。 2.我们使用VR手柄或者鼠标与场景中的一个…...

有关网站建设的论文/链接买卖

结合个人经历总结的前端入门方法 (https://github.com/qiu-deqing/FE-learning)&#xff0c;里面有很详细的介绍。 之前一直想学习前端的&#xff0c;都不知道怎么下手都一年了啥也没学到&#xff0c;现在很迷茫&#xff0c;最经在知乎看了很多人都在谈论怎样学习前端的&#x…...

一个网站如何做桌面快捷链接/seo网站优化推广教程

源&#xff1a;我也DIY一个Android遥控器-全部开源转载于:https://www.cnblogs.com/LittleTiger/p/4431377.html...

郑州专业的网站建设公司哪家好/免费的关键词优化工具

git操作---显示当前工作区域状态&#xff08;git status&#xff09; 1、显示工作区域状态&#xff1a;git status 2、简短显示工作区域状态&#xff1a;git status -s...

专做正品的护肤品网站/专业的网页制作公司

前言 最近碰到这样一个需求&#xff0c;用户需要批量打包下载sharepoint文档库中的文档&#xff0c;所以&#xff0c;就需要开发一个打包下载的服务。 然后&#xff0c;把打包的代码分享给大家&#xff0c;也许会有需要的人。 static void Main(string[] args){string filesPat…...

外国服务器的网站/自媒体平台有哪些

出处&#xff1a;http://blog.csdn.net/u010019717 author&#xff1a;孙广东 时间&#xff1a;2015.3.24 23&#xff1a;00unity中有协程可以提供延迟的功能等。 但是很多时候我们并不想使用&#xff0c;那就自己在Update中控制时间呗。于是我封装了这个类。 若要使用…...