背景
项目中有使用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中关于跨集群参数的配置,故而出现无法识别参数的问题。