行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。

Elasticsearch Java API - 客户端连接(TransportClient,PreBuiltXPackTransportClient)(一)

Elasticsearchquanke 发表了文章 • 1 个评论 • 34396 次浏览 • 2017-11-16 09:52 • 来自相关话题

Elasticsearch Java API 客户端连接


一个是TransportClient,一个是NodeClient,还有一个XPackTransportClient

  • TransportClient:

    作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。


  • NodeClient

    作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的。

  • XPackTransportClient:

    服务安装了 x-pack 插件

    重要:客户端版本应该和服务端版本保持一致

    TransportClient旨在被Java高级REST客户端取代,该客户端执行HTTP请求而不是序列化的Java请求。 在即将到来的Elasticsearch版本中将不赞成使用TransportClient,建议使用Java高级REST客户端。


    上面的警告比较尴尬,但是在 5xx版本中使用还是没有问题的,可能使用rest 客户端兼容性更好做一些。

    [Elasticsearch Java Rest API 手册](https://www.gitbook.com/book/q ... a-rest)

    Maven Repository


    Elasticsearch Java API包已经上传到 [Maven Central](http://search.maven.org/%23sea ... h%2522)

    pom.xml文件中增加:

    transport 版本号最好就是与Elasticsearch版本号一致。

    ```


    org.elasticsearch.client
    transport
    5.6.3

    ```


    ### Transport Client

    #### 不设置集群名称

    ```
    // on startup

    //此步骤添加IP,至少一个,如果设置了"client.transport.sniff"= true 一个就够了,因为添加了自动嗅探配置
    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300))
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300));

    // on shutdown 关闭client

    client.close();
    ```

    #### 设置集群名称

    ```
    Settings settings = Settings.builder()
    .put("cluster.name", "myClusterName").build(); //设置ES实例的名称
    TransportClient client = new PreBuiltTransportClient(settings); //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
    //Add transport addresses and do something with the client...
    ```

    #### 增加自动嗅探配置
    ```
    Settings settings = Settings.builder()
    .put("client.transport.sniff", true).build();
    TransportClient client = new PreBuiltTransportClient(settings);
    ```

    #### 其他配置

    ```
    client.transport.ignore_cluster_name //设置 true ,忽略连接节点集群名验证
    client.transport.ping_timeout //ping一个节点的响应时间 默认5秒
    client.transport.nodes_sampler_interval //sample/ping 节点的时间间隔,默认是5s
    ```
    对于ES Client,有两种形式,一个是TransportClient,一个是NodeClient。两个的区别为:
    TransportClient作为一个外部访问者,通过HTTP去请求ES的集群,对于集群而言,它是一个外部因素。
    NodeClient顾名思义,是作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的,不像TransportClient那样,ES集群对它一无所知。NodeClient通信的性能会更好,但是因为是ES的一环,所以它出问题,也会给ES集群带来问题。NodeClient可以设置不作为数据节点,在elasticsearch.yml中设置,这样就不会在此节点上分配数据。

    如果用ES的节点,仁者见仁智者见智。

    #### 实例

    ```
    package name.quanke.es.study;

    import name.quanke.es.study.util.Utils;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.InetSocketTransportAddress;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;
    import org.junit.After;
    import org.junit.Before;

    import java.net.InetAddress;

    /**
    * Elasticsearch 5.5.1 的client 和 ElasticsearchTemplate的初始化
    * 作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。
    * Created by http://quanke.name on 2017/11/10.
    */
    public class ElasticsearchClient {

    protected TransportClient client;

    @Before
    public void setUp() throws Exception {

    Settings esSettings = Settings.builder()
    .put("cluster.name", "utan-es") //设置ES实例的名称
    .put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
    .build();

    /**
    * 这里的连接方式指的是没有安装x-pack插件,如果安装了x-pack则参考{@link ElasticsearchXPackClient}
    * 1. java客户端的方式是以tcp协议在9300端口上进行通信
    * 2. http客户端的方式是以http协议在9200端口上进行通信
    */
    client = new PreBuiltTransportClient(esSettings)
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.1.10"), 9300));

    System.out.println("ElasticsearchClient 连接成功");
    }

    @After
    public void tearDown() throws Exception {
    if (client != null) {
    client.close();
    }

    }

    protected void println(SearchResponse searchResponse) {
    Utils.println(searchResponse);
    }

    }


    ```
    本实例代码已经上传到 Git [ElasticsearchClient.java](https://gitee.com/quanke/elast ... .java))

    [所有实例](https://gitee.com/quanke/elasticsearch-java-study) 已经上传到Git


    ### XPackTransportClient
    如果 `ElasticSearch ` 服务安装了 `x-pack` 插件,需要`PreBuiltXPackTransportClient`实例才能访问


    使用Maven管理项目,把下面代码增加到`pom.xml`;

    一定要修改默认仓库地址为https://artifacts.elastic.co/maven ,因为这个库没有上传到Maven中央仓库,如果有自己的 maven ,请配置代理

    ```





    elasticsearch-releases
    https://artifacts.elastic.co/maven</url>

    true


    false


    ...

    ...




    org.elasticsearch.client
    x-pack-transport
    5.6.3

    ...

    ...


    ```

    #### 实例


    ```

    /**
    * Elasticsearch XPack Client
    * Created by http://quanke.name on 2017/11/10.
    */
    public class ElasticsearchXPackClient {

    protected TransportClient client;

    @Before
    public void setUp() throws Exception {
    /**
    * 如果es集群安装了x-pack插件则以此种方式连接集群
    * 1. java客户端的方式是以tcp协议在9300端口上进行通信
    * 2. http客户端的方式是以http协议在9200端口上进行通信
    */
    Settings settings = Settings.builder()
    .put("xpack.security.user", "elastic:utan100")
    .put("cluster.name", "utan-es")
    .build();
    client = new PreBuiltXPackTransportClient(settings)
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.1.10"), 9300));
    // final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    // credentialsProvider.setCredentials(AuthScope.ANY,
    // new UsernamePasswordCredentials("elastic", "utan100"));

    System.out.println("ElasticsearchXPackClient 启动成功");
    }

    @Test
    public void testClientConnection() throws Exception {

    System.out.println("--------------------------");
    }

    @After
    public void tearDown() throws Exception {
    if (client != null) {
    client.close();
    }

    }

    protected void println(SearchResponse searchResponse) {
    Utils.println(searchResponse);
    }
    }

    ```

    本实例代码已经上传到 Git [ ElasticsearchXPackClient.java](https://gitee.com/quanke/elast ... .java))

    [所有实例](https://gitee.com/quanke/elasticsearch-java-study) 已经上传到Git


    更多请浏览 [spring-boot-starter-es](https://github.com/quanke/spring-boot-starter-es) 开源项目


    如何有任何问题请关注微信公众号给我留言


    qrcode_for_gh_26893aa0a4ea_258.jpg

关于分片数确定

Elasticsearchlaoyang360 回复了问题 • 3 人关注 • 1 个回复 • 4256 次浏览 • 2017-11-16 07:14 • 来自相关话题

bulk负载不均

Elasticsearchlaoyang360 回复了问题 • 3 人关注 • 1 个回复 • 2433 次浏览 • 2017-11-16 07:15 • 来自相关话题

es表中的每个字段都被索引了吗?

Elasticsearchredhat 回复了问题 • 2 人关注 • 1 个回复 • 8678 次浏览 • 2017-11-15 19:07 • 来自相关话题

求问关于grok正则表达式怎么学习啊?

默认分类kuanglin 回复了问题 • 2 人关注 • 1 个回复 • 4092 次浏览 • 2017-11-16 15:13 • 来自相关话题

关于es-hadoop 添加ik中文分词的问题

Elasticsearchforresttee 回复了问题 • 2 人关注 • 2 个回复 • 3461 次浏览 • 2017-11-17 14:07 • 来自相关话题

新手 elasticsearch api 根据某个字段做数据库中的in操作 有没有具体的api 求助

Elasticsearchchenglp 回复了问题 • 2 人关注 • 1 个回复 • 3916 次浏览 • 2017-11-15 17:12 • 来自相关话题

ES 如何将新文档的索引从 In-memory buffer 写入到文件系统缓存

Elasticsearchredhat 回复了问题 • 4 人关注 • 2 个回复 • 5316 次浏览 • 2017-11-15 19:12 • 来自相关话题

TB级json数据导入elasticsearch问题?

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 3051 次浏览 • 2017-11-15 18:36 • 来自相关话题

kibana 如何使用 nested 内的 nested 的字段 作为filter?

Kibanamedcl 回复了问题 • 3 人关注 • 1 个回复 • 3280 次浏览 • 2017-11-16 10:05 • 来自相关话题

elasticsearch 滚动重启工具

Elasticsearchxiaoke 回复了问题 • 2 人关注 • 1 个回复 • 2810 次浏览 • 2017-11-15 15:02 • 来自相关话题

Elastic Stack 全新推出 6.0.0

资讯动态medcl 发表了文章 • 2 个评论 • 6232 次浏览 • 2017-11-15 13:34 • 来自相关话题

1510725544562.jpg



[https://www.elastic.co/cn/blog ... eased](https://www.elastic.co/cn/blog ... leased)

全新推出 6.0.0。

无需多说。你应该立即下载试用,或者通过你最喜欢的托管式 Elasticsearch 和 Kibana 提供平台 [Elastic Cloud](https://www.elastic.co/cn/cloud/as-a-service/signup) 亲身体验。

如果你在过去几个月没有跟上我们的发布节奏,可能会对今天的公告感到意外。今天标志着成千上万的 pull 请求和成百上千位代码提交者的努力终见成效。期间共有两个 alpha 版本、两个 beta 版本、两个候选版本以及最终的通用版本 (GA)。这个里程碑离不开 Elastic 各路团队的努力。还要感谢参与[先锋计划](https://www.elastic.co/cn/blog ... am-6-0)的用户提出的意见和反馈。

今天,我们不仅发布了整套 Elastic Stack,还发布了 [Elastic Cloud Enterprise 1.1](https://www.elastic.co/cn/cloud/enterprise),其中包括 6.0 支持、离线安装,并且对用户体验进行了一系列改进,旨在简化集群的配置、管理和监控。同天发布多款产品的正式版本还不够……还有仍是 Alpha 版本的 APM ,我们邀请大家在 6.0.0 中对它进行测试。

一个版本有如此多的亮点,该从哪里说起呢?你们撰文细述也好,提供详情链接也好,祝你们有愉快的阅读体验……更重要的是……祝你们有愉快的搜索、分析和可视化体验。

Elasticsearch


全新零停机升级体验,增加了序列 ID、改进了对稀疏数据的处理、加快了查询速度、分布式执行 watch 等等。功能摘要请查看[详情](https://www.elastic.co/cn//blo ... leased)。

Kibana


支持 “Dashboard Only” 模式,支持 “全屏” 模式,能够将保存的搜索结果导出到 .csv,X-Pack 黄金版及以上版本支持通过 UI 创建告警,X-Pack 基础版提供迁移助手,我们还通过调整对比度、支持快捷键来产品易用性,让用户使用起来更方便。数据交互的未来详见[此贴](https://www.elastic.co/cn/blog ... leased)。

Logstash


单一 Logstash 实例中可存在多个自成体系的管道,另有新增 UI 组件 - X-Pack 基础版中的管道查看器,以及 X-Pack 黄金版中的 Logstash 管道管理。了解详情,[点这里](https://www.elastic.co/cn/log/ ... leased)。

Beats


Beats <3 容器以及 Beats <3 模块(并且改进了适用于这些模块的仪表板)。再结合全新命令和配置布局,在 Metricbeat 实现更高效的存储。此外,全新推出 Auditbeat。细节详见[这里](https://www.elastic.co/cn/blog/beats-6-0-0-released)。

ES-Hadoop


对Spark的结构化数据流的一流支持已经降落到了 6.0,并重新编写了连接器映射代码以更好地支持多个映射。支持读写新的连接字段也被添加了。用户现在也可以利用非内联脚本类型的更新操作。[详细信息](https://www.elastic.co/blog/es ... leased)。

立即获取!


_id 批量查询效率问题

Elasticsearch诗兄 回复了问题 • 4 人关注 • 4 个回复 • 6792 次浏览 • 2018-04-20 15:53 • 来自相关话题

Lucene使用GroupingSearch分组和用FirstPassGroupingCollector、SecondPassGroupingCollector分组有什么区别?

回复

Lucenecodepub 发起了问题 • 1 人关注 • 0 个回复 • 3685 次浏览 • 2017-11-15 11:47 • 来自相关话题

上海普翔招聘 Elastic技术支持工程师

求职招聘rockybean 发表了文章 • 0 个评论 • 3910 次浏览 • 2017-11-15 11:13 • 来自相关话题

elastictech_logo.001_.png

 
 招聘职位:Elastic技术支持工程师

工作地点:上海

薪资待遇:18k ~ 25k

公司介绍:上海普翔是 elastic 目前在中国的合作伙伴,负责 X-Pack、ECE 产品销售以及技术咨询等 elastic相关的业务,详情可以查看 http://elastictech.cn

工作内容:

1、与 Elastic 公司一起挖掘国内的付费用户,拜访客户并介绍 X-Pack 、ECE 等产品。

2、参与国内付费用户的 elastic 产品实践,帮助他们解决实际中遇到的问题。

3、参与国内 elastic 产品的推广工作,比如录制教学视频、直播等。

职位要求:

1、本科以上学历,3年以上工作经验。

2、熟悉 Elastic 产品(如 Elasticsearch、Kibana、Logstash、Beats )的使用方法,了解常见优化方案,可以解决社区和客户中用户遇到的问题。

3、需要极强的学习和研究能力,面对一个新产品或者特性时,可以在极短的时间内掌握并通过自己的语言给客户讲解和演示。

4、有良好的沟通和表达能力,擅长倾听客户的问题并快速定位解决问题的关键点。

我们是 elastic 的官方合作伙伴,所以会有很多最新的信息与资料,对 elastic 在中国的发展有信心的同学不要错过机会哦!

欢迎投递简历至:weibinway@elastictech.cn