当前位置: 首页 > 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

http://www.lryc.cn/news/262590.html

相关文章:

  • GitHub入门命令介绍
  • EasyExcel 简单导入
  • Termux搭建nodejs环境
  • 喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例
  • C语言连接zookeeper客户端(不能完全参考官网教程)
  • python排序
  • 【Spark精讲】Spark Shuffle详解
  • 【C++初阶】八、初识模板(泛型编程、函数模板、类模板)
  • 珠海数字孪生赋能工业智能制造,助力制造业企业数字化转型
  • HarmonyOS开发实战:如何实现一个运动排名榜页面
  • 2019年第八届数学建模国际赛小美赛D题安全选举的答案是什么解题全过程文档及程序
  • vivado 创建实施约束
  • 【代码分析】MPI
  • 数字孪生Web3D智慧机房可视化运维云平台建设方案
  • 飞天使-docker知识点12-docker-compose
  • 快速排序(一)
  • GO的sql注入盲注脚本
  • 写好ChatGPT提示词原则之:清晰且具体(clear specific)
  • Java实现快速排序及其动图演示
  • iClient3D 图元操作
  • 从0到1!开发小白快速入门腾讯云数据库
  • Golang清晰代码指南
  • C语言 文件I/O(备查)
  • web(HTML之表单练习)
  • 通过对象轮换实现 LRU 缓存结构
  • 【Unity动画】综合案例完结-控制角色动作播放+声音配套
  • 【工作流Activiti】任务组
  • 桌面概率长按键盘无法连续输入问题
  • 用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式
  • 动手学深度学习-自然语言处理-预训练