文档章节

Elasitcsearch High Level Rest Client学习笔记(一)

木子SMZ
 木子SMZ
发布于 2018/07/12 17:37
字数 1169
阅读 1874
收藏 5

文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.1/java-rest-high.html

java doc地址: https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-high-level-client/6.1.4/index.html.

基于文档翻译理解及个人代码分享,作为学习笔记,根据学习进度更新

前半段根据文档翻译理解,后半段我自己代码。我自己搭建了三节点elasticsearch集群,版本5.6.3,代码也会基于5.6.3版本,插件:head、kibana、x-pack

 

一、文档

High Level Rest Client基于Low Level Rest Client工作,它的主要目的是暴露具体的api方法,以参数的形式接受请求对象并返回一个响应对象。

每一个API可以异步或同步调用,同步方法返回一个响应对象(response object);异步方法以async结尾,需要一个监听器参数(线程管理池使用的是Low Level Rest Client功能)通知相应或者接受异常。

High Level Rest Client依赖于Elasticsearch Core,可以接受 TransportClient相同请求参数和返回相同相应对象。

高级客户端需要Java 1.8并依赖于Elasticsearch core项目。 客户端版本需要与Elasticsearch版本相同。 它与TransportClient请求的参数和返回响应对象相同。

要能够与Elasticsearch进行通信,主版本号需要一致,次版本号不必相同,因为它是向前兼容的。次版本号小于等于elasticsearch的都可以。这意味着它支持与更高版本的Elasticsearch进行通信。

6.0客户端能够与任何6.x Elasticsearch节点通信,而6.1客户端肯定能够与6.1,6.2和任何后来的6.x版本进行通信,但与旧版本的Elasticsearch节点通信时可能会存在不兼容的问题,例如6.1和6.0之间,可能6.1客户端支持elasticsearch 6.0还没出来的API。

建议在将Elasticsearch集群升级到新的主要版本时升级高级客户端,因为REST API中断更改可能会导致意料之外的结果,具体取决于请求所击中的节点,以及新添加的API只能被更新的客户端版本支持。应该在群集中的所有节点都升级到新的主要版本之后,客户端才更新。

高级客户端托管在Maven Central上。所需的最低Java版本是1.8。高级客户端与Elasticsearch的发布周期相同。

添加maven依赖,版本选择相对应的elasearch版本

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.1.4</version>
</dependency>

任何主要版本(像beta版)的第一个版本可能都是在Lucene Snapshot版本之上构建的。在这种情况下,您将无法解析客户端的Lucene依赖关系。

例如,如果您想使用依赖于Lucene 7.0.0-snapshot-00142c9的6.0.0-beta1版本,您必须定义以下repository。

<repository>
    <id>elastic-lucene-snapshots</id>
    <name>Elastic Lucene Snapshots</name>
    <url>http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>false</enabled></snapshots>
</repository>

除此之外,还需要其他的依赖关系

  • org.elasticsearch.client:elasticsearch-rest-client
  • org.elasticsearch:elasticsearch

RestHighLevelClient实例需要Rest low-level client builder构建,代码如下

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

high-level client根据提供的builder内部创建 low-level client ,并管理其生命周期

当不再需要时,需要关闭高级客户端实例,以便它所使用的所有资源以及底层的http客户端实例及其线程得到正确释放。可以通过close方法来完成,该方法将关闭内部的RestClient实例。

client.close();

二、动手

我的es版本是5.6.3,我一开始用的restclient版本也是5.6.3,写代码过程中发现很多区别,比如创建RestHighLevelClient时5.6.3穿入的是RestClient,而6.1传入的是RestClient.Builder。5.6.3版本没有close方法,6.1有close方法,目前没去看源码,不清楚5.6.3怎么处理的使用后的资源,可能是每次使用后回收资源。

 

maven引入,目前实验最新版本6.1.4对es5.6.3还算友好,这里用的6.1.4版本

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.6.3</version>
</dependency>

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>6.1.4</version>
</dependency>

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.1.4</version>
</dependency>

创建client

final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
        //es账号密码
        new UsernamePasswordCredentials(ES_USER_NAME, ES_PWD));
try {
    client = new RestHighLevelClient(
            //传入RestClientBuilder
            RestClient.builder(
                    new HttpHost(host, port)
            ).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                    //这里可以设置一些参数,比如cookie存储、代理等等
                    httpClientBuilder.disableAuthCaching();
                    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                }
            }).setMaxRetryTimeoutMillis(2000)
    );
}catch (Exception e)
{
    //示例方法,不处理异常
    e.printStackTrace();
}

测试代码

GetRequest getRequest = new GetRequest("index", "log", "3");
GetResponse response = client.get(getRequest);

Map<String, Object> fields = response.getSource();
for(Map.Entry<String, Object> entry : fields.entrySet())
{
    System.out.println(entry.getKey() + ":" + entry.getValue());
}

测试结果

 

© 著作权归作者所有

木子SMZ
粉丝 2
博文 34
码字总数 22804
作品 0
昌平
程序员
私信 提问
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("po......

木子SMZ
2018/07/18
0
0
Elasitcsearch High Level Rest Client学习笔记(二) 基础API

1、index API IndexRequest request = new IndexRequest( String jsonString = "{" + request.source(jsonString, XContentType.JSON); //source可以有多种形式下面介绍 source可以以map的形......

木子SMZ
2018/07/17
0
0
High Level REST Client 访问阿里云6.3 Elasticsearch 实例实现

开发环境:InteliJ IDEA 操作系统 :macOS Mojave Elasticsearch 版本:阿里云 6.3.2withX-Pack 客户端版本:REST Client 6.3.2 1. 预先创建好阿里云 ES 实例,开启公网地址访问白名单。 2....

garygao305
01/15
0
0
Elasticsearch Java Rest Client 上手指南(上)

开始看Elasticsearch Java API 的时候,被这段话浇了盆凉水 We plan on deprecating the in Elasticsearch 7.0 and removing it completely in 8.0. Instead, you should be using the Java......

MaxZing
2018/07/17
0
0
Elasticsearch Java Rest Client 上手指南(下)

High Level Rest Clent到现在还不是完成版。我试了一下,5.6版本的就这么些API 包含了基本的增删改查和批量操作 我翻了一下官方文档,凉凉。确实像官方文档说的那样,需要完善。虽然是High ...

MaxZing
2018/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

优雅的关闭Spring Boot

优雅的关闭Spring Boot 1、实现 TomcatConnectorCustomizer 接口拿到Tomcat的连接获取 Tomcat连接池 2、实现 ApplicationListener<ContextClosedEvent> 监听服务器关闭事件,注册JVM钩子函数...

sowhat
今天
2
0
Python3-Web开发

简介 Web开发框架 什么是Web框架? Web应用程序框架或简单的Web框架表示一组库和模块,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。 virtualenv是一个虚拟...

wuxinshui
今天
3
0
使用技媒体实践编写发布博客

技媒体实践博客 CSDN OSChina 知乎 简书 思否 掘金 51CTO

晨猫
今天
2
0
Lucene

1、什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固...

榴莲黑芝麻糊
昨天
5
0
python到setuptools、pip工具的安装

python安装 基础开发库   apt-get install gcc  apt-get install openssl libssl-dev 安装数据库和开发库   apt-get install mysql-server libmysqld-dev python环境   下载地址...

问题终结者
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部