Java 升级High-Level-REST-Client问题记录

项目使用Elasticsearch 6.8.8进行基本操作,因安全需求升级至7.6.2版本。升级过程中,HighLevelRESTClient版本需与ES服务端保持一致,否则会出现未识别参数等问题。

背景

项目中有使用Elasticsearch,版本6.8.8.因为业务要求,需要对es进行基本操作。
目前ES支持的客户端链接方式:

1:REST API
可以通过浏览器请求get方法进行链接;
利用Postman等工具发起REST请求;
Java发起HttpClient请求;

2:Transport链接
通过socket链接,用官网一个的TransPort客户端,底层是netty

经过分析后选择使用High Level REST Client 。
在这里插入图片描述

升级

由于安全部门要求,对系统中的jar包进行安全扫描并升级至安全版本,扫描建议将原6.2.4版本升级为7.6.2。

升级过程:
将pom.xml文件中版本替换,并观察代码中报错信息,并进行修复。
原有SearchRequest中的type已变成不可用状态,不过保留仍然可以,另外是client的search方法中,需要增加RequestOption参数,按照源码内容,就保持默认即可。其他地方无需过多修改。
在这里插入图片描述

测试验证

将替换后的项目启动,准备观测是否可以正确获取信息,结果发现程序报错,信息如下:
在这里插入图片描述

发现在请求信息中存在未识别的参数。
寻找代码中,并没有设置这个参数,根据上面报错猜测这个参数是有默认信息。
在这里插入图片描述
对该参数进行修改调整等一系列操作,发现都无济于事,后来将High Level REST Client版本切换回6.X之后,发现SearchRequest中并没有这个参数,因而是升级后带来的参数信息。
在这里插入图片描述

结论

Java 中的High Level REST Client 为高级别的Rest客户端,基于低级别的REST客户端,增加了编组请求JSON串,解析响应JSON串等相关API,使用的版本需要和ES服务端的版本保持一致,否则会有版本问题。由于ES服务端使用的版本是6.X,不能支持High Level REST Client 7.X中关于跨集群参数的配置,故而出现无法识别参数的问题。

### Java Elasticsearch Rest High Level Client 使用教程 #### 创建 Maven 项目并配置依赖项 为了使用 Elasticsearch 的 High-Level REST Client,在项目的 `pom.xml` 文件中添加如下依赖: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.9.1</version> </dependency> ``` 此依赖允许应用程序连接到 Elasticsearch 实例并执行各种操作[^2]。 #### 初始化客户端实例 建立与 Elasticsearch 节点之间的连接,通常需要创建一个 `RestHighLevelClient` 对象。下面是一段用于初始化该对象的代码片段: ```java import org.elasticsearch.client.RestHighLevelClient; import org.apache.http.HttpHost; public class EsClient { private static final String ES_HOST = "localhost"; private static final int ES_PORT = 9200; public static RestHighLevelClient createClient() { return new RestHighLevelClient( RestClient.builder(new HttpHost(ES_HOST, ES_PORT, "http")) ); } } ``` 这段代码定义了一个静态方法来构建一个新的 `RestHighLevelClient` 客户端实例,并指定了目标主机地址和端口号[^1]. #### 创建索引并向其中插入数据 一旦成功建立了客户端链接,则可以通过调用相应 API 来管理集群中的资源。这里展示了一种方式用来创建名为 “test-index”的新索引并将 JSON 文档写入它内部: ```java try (RestHighLevelClient client = EsClient.createClient()) { // Create index request with settings and mappings. IndexRequest indexRequest = new IndexRequest("test-index"); Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("field", "value"); indexRequest.source(jsonMap); // Execute the indexing operation. IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT); } catch (IOException e) { throw new RuntimeException(e); } ``` 上述例子说明了如何向指定名称的新建或已存在的索引里增加一条记录;同时提供了基本字段映射关系以及设置参数. #### 查询现有文档 检索存储于特定索引下的某条或多条匹配条件的数据也是常见的需求之一。以下是实现全文搜索功能的一个简单案例: ```java SearchRequest searchRequest = new SearchRequest("test-index"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchAllQuery()); searchRequest.source(sourceBuilder); // Perform a search on an open index using the created query. try (RestHighLevelClient client = EsClient.createClient()){ SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println(searchResponse.getHits().getTotalHits().value); } ``` 此处展示了怎样构造查询请求并通过 `match_all` 类型获取所有符合条件的结果集[^3].
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值