在使用ElasticSearch的时候,我们需要与Cluster通信,Java版本的API提供了几种方式来构造Client,进而通过Client操作Cluster。

 
1)使用Node与clustor通信
原理:通过在程序中创建一个嵌入es节点(Node),使之成为ElasticSearch集群的一部分,然后通过这个节点来与ElasticSearch集群通信。
 
最简单的方式:

Node node = NodeBuilder.nodeBuilder().node();

Client client = node.client();

配置cluster集群名称的方式:

(1)配置文件里边配置:/src/main/resources/elasticsearch.yml  添加:cluster.name=yourclustername

(2)代码里边设置: Node node = NodeBuilder.nodeBuilder().clusterName("yourclustername").node();

默认的话启动一个节点,es集群会自动给它分配一些索引的分片, 此时可能会出现一些问题,例如:如果初始化Map的时候,需要分词插件,而本地又没有,就会报错。如果你想这个节点仅仅作为一个客户端而不去保存数据, 你就可以设置把node.data设置成false或node.client设置成true。如:NodeBuilder.nodeBuilder().client(true).node();    此时,就不会出现上面的错误。


还有一种情况是你并不想把节点加入集群,只想用它进行单元测试时,就要启动一个”本地”的es,这里“本地”指的是在jvm的级别下运行,即两个不同的es节点运行在同一个JVM中时会组成一个集群。它需要把节点的local参数设置成true

Node node = NodeBuilder.nodeBuilder().local(true).node();      ???
2)使用TransportClient 与cluster通信
 

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "xg-elasticsearch").put("client.transport.sniff", true).build();

TransportClient transportClient = new TransportClient(settings);

transportClient.addTransportAddress(new InetSocketTransportAddress("192.168.1.16", 9300));

cluster.name 表示:集群的名称,默认为 elasticsearch,可以在ElasticSearch对应的目录elasticsearch\config\下的elasticsearch.yml文件中修改。

如果设置client.transport.sniff为true,则表示客户端去嗅探整个cluster的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。

但是至少添加一个InetSocketTransportAddress,否则会出现异常:org.elasticsearch.client.transport.NoNodeAvailableException: No node
available。这里给出了解释:https://groups.google.com/forum/#!topic/elasticsearch/TkEm068KJyo

意思就是至少手动添加一个节点,而 当client.transport.sniff 设置为true的时候,其做的是会把其它的在同一cluster中的其它的node添加进来。据说:同一cluster下的所有node需要在同一网段下面,待证实。

要注意的是:客户端和集群的cluster的版本需要一致。否则会出现不兼容的问题。

在使用过程中,不要重复构造Client对象,应该使用单例复用。

ElasticSearch 之 Client的更多相关文章

  1. Elasticsearch .Net Client NEST使用说明 2.x

    Elasticsearch .net client NEST使用说明 2.x Elasticsearch.Net与NEST是Elasticsearch为C#提供的一套客户端驱动,方便C#调用Elast ...

  2. Elasticsearch .Net Client NEST 多条件查询示例

    Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...

  3. elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...

  4. Elasticsearch .net client NEST 5.x 使用总结

    目录: Elasticsearch .net client NEST 5.x 使用总结 elasticsearch_.net_client_nest2.x_到_5.x常用方法属性差异 Elastics ...

  5. Elasticsearch .net client NEST使用说明 2.x -更新版

    Elasticsearch .net client NEST使用说明 目录: Elasticsearch .net client NEST 5.x 使用总结 elasticsearch_.net_cl ...

  6. Elasticsearch Java Client连接池

    按照Elasticsearch API,在Java端使用是ES服务需要创建Java Client,但是每一次连接都实例化一个client,对系统的消耗很大,即使在使用完毕之后将client close ...

  7. Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...

  8. Creating a custom analyzer in ElasticSearch Nest client

     Creating a custom analyzer in ElasticSearch Nest client Question: Im very very new to elasticsearch ...

  9. elasticsearch java client

    1.集群名相同,且机器处于同一局域网同一网段,es会自动去发现其他的节点.2.集群不在同一局域网同一网段时,只需要在 elasticsearch.yml 中配置目标机器和端口即可discovery.z ...

  10. elasticsearch——Rest Client

    https://www.jianshu.com/p/66b91bec12e3 elasticsearch——Rest Client 0.2372018.05.10 15:23:03字数 1287阅读 ...

随机推荐

  1. sql注入【手工及一些工具】

    Sql注入原理分析: 网站程序存在可控传递参数,参数未进行过滤直接带入数据库查询,导致攻击者可通过传递恶意sql语句代码进行执行攻击. Sql注入产生条件 1.必须有参数传递 2.参数值带入数据库查询 ...

  2. CEFSharp在anycpu下的编译

    记录一篇博文,将CEFSharp在AnyCpu下使用: 地址:http://pengxiaobo123.blog.163.com/blog/static/20471515420172164593726 ...

  3. 笨办法学Python(十)

    习题 10: 那是什么? 在习题 9 中我你接触了一些新东西.我让你看到两种让字符串扩展到多行的方法.第一种方法是在月份之间用 \n (back-slash n )隔开.这两个字符的作用是在该位置上放 ...

  4. simotion ST编程,变量和程序的模块化

    通过这几年的实践,对simotion的程序结构规划有了一些新的理解.工程师在面对项目时,经常有几个问题比较困惑. 目前面对的问题 1)如何理解其他人编写的程序 2)如何从程序中找到可以移植的部分 传统 ...

  5. 关于nutz跨服务器上传文件

    关于nutz跨服务器上传文件  发布于 578天前  作者 yong9664  770 次浏览  复制  上一个帖子  下一个帖子  标签: 无 是这样的,项目在一台服务器,文件要存储到另外一台服务器 ...

  6. 【CCPC-Wannafly Winter Camp Day4 (Div1) J】跑跑跑路(爬山)

    点此看题面 大致题意: 共两轮,每轮每人有一个标签,标签相同的人必须到同一个点集合.求所有人总路程的最小值. 爬山算法 这道题貌似有三种做法:模拟退火.高斯消元以及爬山算法. 相比之下,自然是爬山算法 ...

  7. web的攻击技术

    简单的http协议本身并不存在安全性问题,因此技术本身几乎不会成为攻击的对象,应用http协议的服务器和客户端,以及运行在服务器端web应用等资源才是攻击目标,那么怎么攻击,来源于哪里呢 web应用攻 ...

  8. service 入门

    https://www.cnblogs.com/keguangqiang/p/3663086.html#undefined

  9. 几位it 前辈的博客

    赵劼 http://blog.zhaojie.me/?page=2 陈硕 http://www.cnblogs.com/Solstice/ 轮子哥 http://www.cnblogs.com/gen ...

  10. MySQL 中while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...