首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Java Rest Client操作Elasticsearch

使用Java Rest Client操作Elasticsearch

作者头像
我是攻城师
发布2018-05-14 17:28:45
2.8K0
发布2018-05-14 17:28:45
举报
文章被收录于专栏:我是攻城师我是攻城师

Elasticsearch作为一个成熟的开源框架,对主流的多种客户端语言都支持,比如Java,JavaScript ,PHP,.Net,Python,Ruby,CURL当然还有一些小众的语言,虽然es官网没支持,但是个人开发者也有一些开源的,具体的可在es官网clients地址查看:

https://www.elastic.co/guide/en/elasticsearch/client/index.html

开发过程中,基本最常用的就是Java和curl的方式了,因为es本身就是使用java语言开发的,所以对Java的支持应该是最到位了,此外es也支持rest ful的DSL的访问方式,我们可以在linux上轻松的使用curl命令来对es进行增删改查,curl的操作方式大多数都是临时的,实际开发的我们还是用编程语言来访问的:

es支持Java API的访问方式,支持非常全面,唯一的缺点就是依赖有点多,代码稍臃肿,有时候我们想简单的开发一个非常小的功能,又不想使用java笨重的客户端方式,应该怎么办?

上文说到es支持rest的访问方式,那么我们完全可以使用httpclient或者jsoup来直接发送http请求不就行了吗?其实是可以的,使用httpclient和jsoup来发送curl的命令也能操作es,获取结果。这里面有一个需要注意的地方。

httpclient和jsoup都不直接支持发送DELETE方法带参数的请求,这一点是个小缺陷,如果这个不支持,意味着一些删除操作比如delete by query可能支持不太好。jsoup是完全不支持,而在httpclient里面我们可以通过继承重写HttpEntityEnclosingRequestBase来满足,删除请求带参数体,下面来看下如何使用:

继承重写的代码:

然后使用httpclient发送一个删除请求:

httpclient还是比较强大的,但是上面的代码还是有点复杂,而且涉及连接的地方是有问题的,我们都知道es一般都是多台机器组成集群,而使用原生的httpclient请求建立的链接只能是某一台机器的ip这样一来,如果这台机器挂掉这个客户端程序就完全不能使用了,所以风险还是比较大的,不过也不用担心,es官网也提供了ES Java RestClient的方式来访问es,这个库底层用的也是httpclient的组件,只不过es官网做了封装,支持多机器ip,以及对请求方法做了简化,所以想减少项目的依赖,又对支持功能要求比较健壮,我们就可以使用这个库来开发我们的业务。

官网文档地址:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html

maven依赖:

下面来看下,如何使用ES的RestClient来操作ES:

总结:

ES官网提供的RestClient还支持nio实现的异步非阻塞的方式多线程多送请求,通过回调函数来处理响应的结果,当然了权限认证,超时中断,失败重试,线程数都有对应的设置选项,感兴趣的朋友可自行查阅尝试。

通过对比我们发现官网封装的RestClient使用起来更加简单和健壮,比起来没有包装的httpclient原生的方式更加符合生产环境的标准,对于不想熟悉标准的java api的es操作方法,又想通过java来访问es的朋友们,RestClient是一个不错的选择。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档