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索引

/*** 操作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;}/*** 创建索引-待优化*/public boolean createIndex(String indexName, Map<String, Object> columnMap) {try {if (!checkIndex(indexName)) {CreateIndexRequest request = new CreateIndexRequest(indexName);if (columnMap != null && columnMap.size() > 0) {Map<String, Object> source = new HashMap<>();source.put("properties", columnMap);request.mapping(source);}this.restHighLevelClient.indices().create(request, options);return Boolean.TRUE;}} catch (Exception e) {log.error("EsIndexOperation createIndex error.", e);}return Boolean.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;}
}

4 参考文献

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在不同的操作系统和架构中构建Go应用程序

在软件开发中,重要的是要考虑要编译二进制文件的操作系统和底层处理器架构。由于在不同的操作系统/体系结构平台上运行二进制文件通常很慢,甚至不可能,因此通常的做法是为许多不同的平台构建最终的二进制文件,以最大限度地吸引程序的受众。然而,当用于开发的平台与要部署程…

【PTA刷题】 顺序表(删除)(代码+详解)

文章目录 题目C代码详解 题目 已知一组数据&#xff0c;采用顺序存储结构存储&#xff0c;其中所有的元素为整数。设计一个算法&#xff0c;删除元素值在[x,y]之间的所有元素 输入格式: 输入包含三行数据&#xff0c;第一行是表中元素个数&#xff0c;第二行是顺序表的各个元素…

OpenCV极坐标变换函数warpPolar的使用

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为1702字&#xff0c;预计阅读4分钟 前言 前阵子在做方案时&#xff0c;得了几张骨钉的图片&#xff0c;骨科耗材批号效期管理一直是比较麻烦的&#xff0c;贴RFID标签成本太高&#xff0c;所以一般考虑还是…

Crow:黑魔法 添加路由3 绑定lambda

Crow:黑魔法2 new_rule_tagged实现模板参数的绑定-CSDN博客 template<uint64_t N> typename black_magic::arguments<N>::type::template rebind<TaggedRule>& new_rule_tagged(const std::string& rule) {using RuleT = typename black_magic::arg…

07.Go 流程控制

流程控制是Go语言中必不可少的一部分&#xff0c;也是整个编程基础的重要一环。Go语言的流程控制语句和其他编程语言的流程控制语句有些不同&#xff0c;主要体现在Go语言没有do-while语句。Go语言常用的流程控制包括if语句、switch语句、for语句及goto语句等&#xff0c;switc…

涉密网络的IP查询防护策略

涉密网络的安全性对于维护国家、企业及个人的核心利益至关重要。在当今数字化时代&#xff0c;网络攻击日益猖獗&#xff0c;其中IP查询是攻击者获取目标信息的一种常见手段。本文将探讨涉密网络中防护IP查询的关键策略&#xff0c;以确保网络的机密性和安全性。 1. 专用VPN和…

一个文件下png,jpg,jpeg,bmp,xml,json,txt文件名称排序命名

#utf-8 #authors 会飞的渔WZH #time:2023-12-13 import os# 要修改的图像所在的文件夹路径 root_path rD:\images\lines2\3 # 要修改的图像所在的文件夹路径filelist os.listdir(root_path) #遍历文件夹 print(len(filelist)) i0for item in filelist:if item.endswith(.…

《点云进阶》专栏文章目录

目录 一、PCL进阶篇* 二、Open3D进阶篇 一、PCL进阶篇 * PCL 最小二乘拟合二维直线PCL 最小二乘拟合空间直线PCL 计算点云的倒角距离&#xff08;Chamfer Distance&#xff09;PCL 点云配准精度评价——点到面的均方根误差PCL 可视化八叉树PCL 计算Hausdorff距离PCL 从变换矩…

@EventListener工作原理

EventListener 是 Spring Framework 提供的用于处理事件监听的注解。它的工作原理基于观察者设计模式&#xff0c;其中有一个事件发布者&#xff08;publisher&#xff09;和一个或多个事件监听者&#xff08;listener&#xff09;。 事件发布者&#xff08;Event Publisher&am…

使用 Timm 库替换 RT-DETR 主干网络 | 1000+ 主干融合RT-DETR

文章目录 前言版本差异说明替换方法parse_moedl( ) 方法_predict_once( ) 方法修改 yaml ,加载主干论文引用timm 是一个包含最先进计算机视觉模型、层、工具、优化器、调度器、数据加载器、数据增强和训练/评估脚本的库。 该库内置了 700 多个预训练模型,并且设计灵活易用。…

winform使用CefSharp嵌入VUE网页并交互

1、NuGet添加CefSharp 如果下载慢或失败可以更新下载源 腾讯资源https://mirrors.cloud.tencent.com/nuget/华为资源https://repo.huaweicloud.com/repository/nuget/v3/index.json 2、将项目平台改为X64 3、在winform窗体添加cef using CefSharp; using CefSharp.WinForms; u…

微信小程序如何跳转到网页

微信小程序可以使用wx.navigateToMiniProgram方法实现跳转到其他小程序&#xff0c;但是跳转到网页需要使用wx.navigateTo方法&#xff0c;并将所跳转的地址写在URL参数中。 例如&#xff0c;跳转到百度的网页可以使用以下代码&#xff1a; wx.navigateTo({url: https://www.…

【QT】时间日期与定时器

目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 …

Python将字符串拆成单字的函数代码设计

将字符串拆成单字的两种可能情况 要想将字符串拆成单字&#xff0c;在Python中有一个非常简单的方法&#xff0c;一行代码就可以搞定了。那就是将字符串转换成列表list即可。这个过程可以使用内置的list()函数。不过&#xff0c;如果是要将英文的拆分为单个单词&#xff0c;那…

04.HTML其他知识

HTML其他知识 1.HTML实体 介绍 在 HTML 中我们可以用一种特殊的形式的内容&#xff0c;来表示某个符号&#xff0c;这种特殊形式的内容&#xff0c;就是 HTML 实体。比如小于号 < 用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符&#xff0c;我们必须在…

详解MySQL中一条SQL执行过程

MySQL基本架构 如下图所示&#xff0c;从宏观角度来说MySQL架构可以分为server层和存储引擎层&#xff0c;其中Server层包含如下: 连接器:进行身份认证和权限相关校验。查询缓存:MySQL8.0已废弃&#xff0c;查询缓存主要是用于提高查询效率而加的一层缓存。分析器:对SQL执行动…

别再错过!这些隐藏版小网站,让你大呼过瘾!

今天给大家分享一些摸鱼小网站&#xff0c;再忙也别忘记摸鱼呀~~~ 01、简约时钟 网址&#xff1a;https://dateclock.net/ github&#xff1a;https://github.com/jtheletter/dateclock 这个是github上的一个开源项目&#xff0c;大家可以看到它的全部代码。打开网站就能看到…

法语 Alt 代码表

法语的 Alt 代码表&#xff0c;请参考下图。 输入方法就是按住 Alt 键不松开&#xff0c;然后在小键盘上输入字符&#xff0c;松开 Al 键&#xff0c;计算机就能输出上面的字符了。 西班牙语 Alt 代码表 - 系统容器 - iSharkFly西班牙语 Alt 代码表&#xff0c;请参考下图。 输…

《大模型合规白皮书2023》:为了解大模型立法最新动态和立法趋势提供有价值的参考

本白皮书在我国人工智能法律监管框架下进一步梳理了大模型相关方的合规义务及要点&#xff0c;并展望未来大模型法律监管体系的发展趋势与特征&#xff0c;对政府、企业、社会共建大模型治理体系提出切实建议&#xff0c;从而为社会各界了解大模型立法最新动态和立法趋势提供有…

C++ Qt开发:Slider滑块条组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍Slider滑块条组件的常用方法及灵活运用。 当…