- 浏览: 2183619 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
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来满足,删除请求带参数体,下面来看下如何使用:
继承重写的代码:
package tools; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import java.net.URI; public class MyHttpDelete extends HttpEntityEnclosingRequestBase { // public static final String METHOD_NAME = "DELETE"; // public String getMethod() { return METHOD_NAME; } // public MyHttpDelete(final String uri) { super(); setURI(URI.create(uri)); } // public MyHttpDelete(final URI uri) { super(); setURI(uri); } // public MyHttpDelete() { super(); } }
然后使用httpclient发送一个删除请求:
//实例化http,删除id=1001的一条数据 val client = HttpClients.createDefault() val httpdelete = new MyHttpDelete("http://localhost:9200/test_index/logs/_query") val s = new StringEntity("{ \"query\": { \"query_string\": { \"query\": id:1001 " } }} ",ContentType.APPLICATION_JSON) httpdelete.setEntity(s) val rs=client.execute(httpdelete)//执行删除 //解析响应结果 val json = EntityUtils.toString(rs.getEntity(), "UTF-8") //释放资源 client.close()
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依赖:
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>rest</artifactId> <version>5.5.1</version> </dependency>
下面来看下,如何使用ES的RestClient来操作ES:
//初始化RestClient实例 static RestClient restClient = RestClient.builder( new HttpHost("192.168.10.5", 9200, "http"), new HttpHost("192.168.10.6", 9200, "http"), new HttpHost("192.168.10.7", 9200, "http")).build() // (1) 执行一个基本的方法,验证es集群是否搭建成功 Response response = restClient.performRequest("GET", "/", Collections.singletonMap("pretty", "true")); System.out.println(EntityUtils.toString(response.getEntity())); //输出结果: { "name" : "nd2", "cluster_name" : "search", "version" : { "number" : "2.3.4", "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f", "build_timestamp" : "2016-06-30T11:24:31Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search" } // (2)验证es的某个索引是否存在 Response response = restClient.performRequest("HEAD","/product/pdt",Collections.<String, String>emptyMap()); System.out.println(response.getStatusLine().getReasonPhrase().equals("OK")); //输出结果: true // (3) 删除某个索引的指定条件的数据 Map<String, String> paramMap = new HashMap<String, String>(); paramMap.put("q", "id:"+id); paramMap.put("pretty", "true"); Response response = restClient.performRequest("DELETE", + "product/pdt/_query", paramMap); System.out.println(EntityUtils.toString(response.getEntity())); //输出结果: { "took" : 0, "timed_out" : false, "_indices" : { "_all" : { "found" : 1, "deleted" : 0, "missing" : 0, "failed" : 0 } }, "failures" : [ ] }
总结:
ES官网提供的RestClient还支持nio实现的异步非阻塞的方式多线程多送请求,通过回调函数来处理响应的结果,当然了权限认证,超时中断,失败重试,线程数都有对应的设置选项,感兴趣的朋友可自行查阅尝试。
通过对比我们发现官网封装的RestClient使用起来更加简单和健壮,比起来没有包装的httpclient原生的方式更加符合生产环境的标准,对于不想熟悉标准的java api的es操作方法,又想通过java来访问es的朋友们,RestClient是一个不错的选择。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
发表评论
-
复盘一个Elasticsearch排序问题的剖析
2019-07-15 21:12 1169最近线上的es查询的 ... -
elasticsearch里面bulk的用法
2018-04-09 20:23 1423上篇文章介绍了在es里 ... -
elasticsearch里面的关于批量读取mget的用法
2018-04-04 16:01 1834es的api除了提供了基本 ... -
elasticsearch的查询流程分析
2018-04-02 20:29 1329我们都知道es是一个分 ... -
如何在elasticsearch里面使用深度分页功能
2018-03-28 18:13 2021前面的文章提到过es默认的from+size的分页方式返回的结 ... -
如何在Elasticsearch里面使用索引别名
2018-03-27 20:37 1681在elasticsearch里面给index起一个alias ... -
如何优雅的全量读取Elasticsearch索引里面的数据
2018-03-26 20:27 7653### (一)scroll的介绍 有时候我们可能想要读取整个 ... -
关于elaticsearch中更新数据的几种方式
2018-03-21 19:00 967作为一个成熟的框架, ... -
Elasticsearch里面的segment合并
2018-03-20 17:50 2093通过前面的文章,我 ... -
Elasticsearch如何保证数据不丢失?
2018-03-19 20:52 2143上篇文章提到过,在elasticsearch和磁盘之间还有一层 ... -
为什么说Elasticsearch搜索是近实时的?
2018-03-16 19:41 9458通过前面两篇文章的介绍,我们大概已经知道了 Elasticse ... -
Elasticsearch如何动态维护一个不可变的倒排索引
2018-03-15 21:34 1139上一篇文章中介绍了Elasticsearch中是如何搜索文本 ... -
Elasticsearch如何检索数据
2018-03-14 20:11 1070我们都知道Elasticsearch是一个全文检索引擎,那么它 ... -
如何备份ElasticSearch索引数据到HDFS上
2018-02-09 18:19 2423在ElasticSearch里面备份策略已经比较成熟了 ... -
Elasticsearch5.6.4集群搭建
2018-02-07 20:13 1341本次搭建的是一个三节点的集群 (一)es的安装 (1)下 ... -
如何使log4j生成json格式的log
2017-09-15 17:44 3826使用java开发项目时,log日志一般都是应用程序必不可少的一 ... -
理解elasticsearch的parent-child关系
2017-09-04 18:43 2841前面文章介绍了,在es里面的几种数据组织关系,包括array ... -
简述ElasticSearch里面复杂关系数据的存储方式
2017-08-18 20:10 2414在传统的数据库里面,对数据关系描述无外乎三种,一对一,一对多和 ... -
ElasticSearch里面的偏好查询
2017-06-22 17:17 1305在es查询的时候我们可 ... -
ElasticSearch里面的路由功能介绍
2017-06-21 18:17 2249在ElaticSearch里面,路由 ...
相关推荐
标签:elasticsearch、client、rest、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
标签:elasticsearch、client、rest、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
在本文中,我们将深入探讨 Elasticsearch Java REST 客户端的使用、工作原理以及常见操作。 **一、Java REST 客户端介绍** Java REST 客户端是 Elasticsearch 的官方客户端之一,它提供了一种简单且高效的方式来...
赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar;...标签:elasticsearch、client、rest、high、level、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵
在Elasticsearch 6.0版本中...总之,Elasticsearch 6.0的Java REST Client提供了高效且易于使用的API,使得开发者能够方便地实现CRUD操作。确保正确理解和使用这些API,能够极大地提升你的Elasticsearch集成开发效率。
标签:elasticsearch、client、rest、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
rest client全套封装好的java调用elasticsearch功能的工程demo,亲测可用。我安装的es是elasticsearch-7.10.0版本,测试好用。直接用idea打开工程就可以使用,并且有写好的junit测试类,可供测试。可以直接拿来做应用...
总结来说,基于Java Rest High Level Client的Elasticsearch-Sql组件为开发者提供了一种用SQL查询Elasticsearch数据的便捷方式,降低了使用Elasticsearch的复杂性,提升了开发效率。如果你是Java开发者并且需要处理...
标签:elasticsearch、client、rest、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar;...标签:elasticsearch、client、rest、high、level、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.htm
标签:elasticsearch、client、rest、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
7. **Java REST客户端的使用**:`RestHighLevelClient`是Elasticsearch提供的高级Java客户端,提供了丰富的API用于操作索引、文档、搜索等。创建客户端实例需要提供ES服务器的URL,可以设置连接参数如超时、重试策略...
标签:elasticsearch、client、rest、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
在Java环境中,与Elasticsearch进行交互通常会使用官方提供的Java REST客户端。本文将详细介绍如何构建一个封装了基本增删改查功能的Elasticsearch Java工具类。 首先,我们需要引入Elasticsearch的Java客户端依赖...
Java 高级 REST 客户端是 Elasticsearch 7.10 版本的官方文档,主要面向使用 Java 开发的应用程序。这个客户端是官方唯一维护的 Java 接口,用于与 Elasticsearch 进行通信,提供了高级封装的 RESTful API 调用方式...
通用高性能Elasticsearch highlevel java orm rest client 客户端,100%兼容elasticsearch 1.x,2.x,5.x,6.x,7.x,8.x,兼容spring boot 1.x,2.x,3.x,开箱即用。ES小白分分钟上手,功能丰富,涵盖Elasticsearch所有...
本资源包含的是Jest客户端的全部依赖jar包,确保了在Java项目中使用Jest进行Elasticsearch操作时的完整性和稳定性。 首先,Jest客户端的核心功能在于其RESTful API的实现。REST(Representational State Transfer)...
java运行依赖jar包
java运行依赖jar包
通过深入学习和实践,你可以熟练地使用Java High Level REST Client来满足各种Elasticsearch操作的需求。 总的来说,Java Transport Client和Java High Level REST Client是Elasticsearch在Java环境下的两种主要...