设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 895|回复: 0

[经验分享] Elasticsearch java api——节点实例化

[复制链接]

尚未签到

发表于 2017-5-21 06:09:07 | 显示全部楼层 |阅读模式
  Elasticsearch java api——节点实例化
要连接到集群,首先要告诉集群:你是谁,你有什么特征。在es中体现为实例化节点。
es通过org.elasticsearch.node.NodeBuilder的build()或者node()方法实例化节点,build()创建节点而不启动,而node()方法等价于build().start(),即创建并启动。
首先实例化NodeBuilder,有两种方式,第一种是new,如下:
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = new NodeBuilder();  

  
第二种是使用NodeBuilder的工厂方法,NodeBuilder中有以下代码:

 
 
[java] view plaincopy 
 



  • public static NodeBuilder nodeBuilder() {  
  •     return new NodeBuilder();  
  • }  

  
所以可以直接通过以下代码实例化NodeBuilder:
 
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder();  

  
实例化后便可设置该node的特性,NodeBuilder本身自带了一些方法:

 
1. loadConfigSettings,是否加载配置文件。
你可以在classpath下创建一个elasticsearch.yml文件,然后在其中设置一些属性(参见分布式搜索Elasticsearch——配置),再把loadConfigSettings的值设置为true即可,代码如下:
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().loadConfigSettings(true);  

  
loadConfigSettings默认为true。

 
2. 是否只作为客户端,即不存储索引数据,默认值为false,代码如下所示:
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().client(true);  

  
3. 是否持有索引数据,默认值为true,代码如下所示:

 
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true);  

  
client(boolean)和data(boolean)会有一定的关联,当client的值为true时,data的值默认为false,且不能改为true,否则会报错,即如下代码是不允许的:
 
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true).client(true);  

  
当client的值为false时,data的值默认为true,而且改为false也不起作用,也即以下两行代码是等价的:
 
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true).client(false);  
  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(false).client(false);  

  
4. 是否为本地节点,本地节点是指在JVM级别中的同级,当多个节点使用同一个JVM时,这些节点可以组合成一个集群,而非同一个JVM下的节点则不处于集群中,默认值为false:
 
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().local(true);  

  
5. 设置集群名,即该节点位于哪个集群下,默认值为elasticsearch:
 
 
[java] view plaincopy 
 



  • NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().clusterName("your name");  

  
若多个节点设置了同一个clusterName,则说明这几个节点位于同一个集群下。

 
6. 以Map的方式设置属性,NodeBuilder中有以下两个方法:
 
[java] view plaincopy 
 



  • /** 
  •  * Explicit node settings to set. 
  •  */  
  • public NodeBuilder settings(Settings.Builder settings) {  
  •     return settings(settings.build());  
  • }  
  •   
  • /** 
  •  * Explicit node settings to set. 
  •  */  
  • public NodeBuilder settings(Settings settings) {  
  •     this.settings.put(settings);  
  •     return this;  
  • }  

  
这两个方法允许你通过Map的方法设置属性,如以下代码所示:
 
 
[java] view plaincopy 
 



  • Map<String, String> settingMap = new HashMap<String, String>();  
  • settingMap.put("node.client""false");  
  • settingMap.put("node.data""true");  
  • settingMap.put("node.local""true");  
  • settingMap.put("cluster.name""clasterName");  
  • settingMap.put("node.name""geloin");  
  •   
  • Settings settings = ImmutableSettings.settingsBuilder().put(settingMap).build();  
  • Node node = NodeBuilder.nodeBuilder().settings(settings).node();  

  
org.elasticsearch.common.settings.Settings是一个接口,org.elasticsearch.common.settings.ImmutableSettings才是它的实现类。

 
上一篇文章分布式搜索Elasticsearch——配置说了一些es的配置,你可以都设置在上述代码中的map中。
综上所述,我们对设置Node的属性有以下结论:
1. 使用配置文件方式,即在classpath下建立一个elasticsearch.yml文件,然后把分布式搜索Elasticsearch——配置里面提到的配置加入到此文件中,再保持loadConfigSettings为true即可;
2. 使用Map方式,然后用NodeBuilder.nodeBuilder().settings(settings);
3. 使用NodeBuilder自带了client、data、local、clusterName方法,不过NodeBuilder自带的方法有限,所以可能还需要配合以上提到的两种方式才能达到你的要求。
至于如何选择,那就看你自己了。

 
 使用java client有以下几种方式:
        (1) 在一个已经存在的集群中,执行标准的index、get、delete或search操作;
        (2) 在一个正在运行的集群中,执行管理任务;
        (3) 在你的应用中运行集成的Elasticsearch或者当你执行单元测试或集成测试时启动全部的节点时;
        获取Client对象很简单,最常用的方法是:
        (1) 创建一个作为集群中节点的嵌入式Node;
        (2) 从第一步创建的嵌入式Node中,请求一个Client;
        另一种方式是创建一个连接到集群中的TransportClient。
        请注意:我们推荐设置客户端和集群端的版本号为一致,因为当两者版本号不一致时,将会出现很多不协调的问题。
        当你启动一个节点时,它会自动加入同网段的ES集群,前提是ES的集群名(cluster.name)参数为一致(该参数默认值为elasticsearch,你也可在/src/main/resources/elasticsearch.yml或者使用代码更改集群名)。
        通过TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口。

        当然,若无特殊情况,我们通常的创建Client的方式如下所示:
 
[java] view plaincopy 
 



  • NodeBuilder builder = NodeBuilder.nodeBuilder();  
  • // 设置builder,如builder.client(false)等,具体参见<a target="_blank" href="http://blog.csdn.net/geloin/article/details/8446895">http://blog.csdn.net/geloin/article/details/8446895</a>  
  • Client client = builder.client();  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379407-1-1.html 上篇帖子: ElasticSearch的各种服务的URL(转) 下篇帖子: APDPlat拓展搜索之集成ElasticSearch
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表