`
qindongliang1922
  • 浏览: 2180883 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117400
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125816
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59781
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71224
社区版块
存档分类
最新评论

使用Java Rest Client操作Elasticsearch

    博客分类:
  • ELK
阅读更多

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),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
0
0
分享到:
评论

相关推荐

    elasticsearch-rest-client-6.3.0-API文档-中英对照版.zip

    标签:elasticsearch、client、rest、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    elasticsearch-rest-client-6.8.3-API文档-中文版.zip

    标签:elasticsearch、client、rest、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    Elasticsearch Java Rest Client..zip

    在本文中,我们将深入探讨 Elasticsearch Java REST 客户端的使用、工作原理以及常见操作。 **一、Java REST 客户端介绍** Java REST 客户端是 Elasticsearch 的官方客户端之一,它提供了一种简单且高效的方式来...

    elasticsearch-rest-high-level-client-6.8.3-API文档-中文版.zip

    赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar;...标签:elasticsearch、client、rest、high、level、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵

    elasticsearch Client端的JAVA代码例子

    在Elasticsearch 6.0版本中...总之,Elasticsearch 6.0的Java REST Client提供了高效且易于使用的API,使得开发者能够方便地实现CRUD操作。确保正确理解和使用这些API,能够极大地提升你的Elasticsearch集成开发效率。

    elasticsearch-rest-client-6.3.0-API文档-中文版.zip

    标签:elasticsearch、client、rest、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    rest client全套封装好的java调用elasticsearch功能的工程demo,亲测可用

    rest client全套封装好的java调用elasticsearch功能的工程demo,亲测可用。我安装的es是elasticsearch-7.10.0版本,测试好用。直接用idea打开工程就可以使用,并且有写好的junit测试类,可供测试。可以直接拿来做应用...

    基于Java Rest High Level Client的Elasticsearch-Sql组件【stalled】.zip

    总结来说,基于Java Rest High Level Client的Elasticsearch-Sql组件为开发者提供了一种用SQL查询Elasticsearch数据的便捷方式,降低了使用Elasticsearch的复杂性,提升了开发效率。如果你是Java开发者并且需要处理...

    elasticsearch-rest-client-6.2.3-API文档-中英对照版.zip

    标签:elasticsearch、client、rest、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    elasticsearch-rest-high-level-client-6.8.3-API文档-中英对照版.zip

    赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar;...标签:elasticsearch、client、rest、high、level、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.htm

    elasticsearch-rest-client-6.8.3-API文档-中英对照版.zip

    标签:elasticsearch、client、rest、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    JAVA实现ElasticSearch的简单实例

    7. **Java REST客户端的使用**:`RestHighLevelClient`是Elasticsearch提供的高级Java客户端,提供了丰富的API用于操作索引、文档、搜索等。创建客户端实例需要提供ES服务器的URL,可以设置连接参数如超时、重试策略...

    elasticsearch-rest-client-6.2.3-API文档-中文版.zip

    标签:elasticsearch、client、rest、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    Elasticsearch的JAVA操作工具类,包括增删改查的封装

    在Java环境中,与Elasticsearch进行交互通常会使用官方提供的Java REST客户端。本文将详细介绍如何构建一个封装了基本增删改查功能的Elasticsearch Java工具类。 首先,我们需要引入Elasticsearch的Java客户端依赖...

    java-high-level-REST-client.pdf

    Java 高级 REST 客户端是 Elasticsearch 7.10 版本的官方文档,主要面向使用 Java 开发的应用程序。这个客户端是官方唯一维护的 Java 接口,用于与 Elasticsearch 进行通信,提供了高级封装的 RESTful API 调用方式...

    通用高性能Elasticsearch highlevel java orm rest client 客户端

    通用高性能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所有...

    Elasticsearch之Java客户端Jest的全部依赖jar包

    本资源包含的是Jest客户端的全部依赖jar包,确保了在Java项目中使用Jest进行Elasticsearch操作时的完整性和稳定性。 首先,Jest客户端的核心功能在于其RESTful API的实现。REST(Representational State Transfer)...

    elasticsearch-rest-client-6.4.3.jar

    java运行依赖jar包

    elasticsearch-rest-client-7.5.1.jar

    java运行依赖jar包

    elastic search java.zip

    通过深入学习和实践,你可以熟练地使用Java High Level REST Client来满足各种Elasticsearch操作的需求。 总的来说,Java Transport Client和Java High Level REST Client是Elasticsearch在Java环境下的两种主要...

Global site tag (gtag.js) - Google Analytics