`

Elasticsearch java api——节点实例化

阅读更多

Elasticsearch java api——节点实例化

 

要连接到集群,首先要告诉集群:你是谁,你有什么特征。在es中体现为实例化节点。

es通过org.elasticsearch.node.NodeBuilder的build()或者node()方法实例化节点,build()创建节点而不启动,而node()方法等价于build().start(),即创建并启动。

首先实例化NodeBuilder,有两种方式,第一种是new,如下:

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = new NodeBuilder();  


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

 

 

[java] view plaincopy
 
 
  1. public static NodeBuilder nodeBuilder() {  
  2.     return new NodeBuilder();  
  3. }  


所以可以直接通过以下代码实例化NodeBuilder:

 

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder();  


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

 

1. loadConfigSettings,是否加载配置文件。

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

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().loadConfigSettings(true);  


loadConfigSettings默认为true。

 

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

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().client(true);  


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

 

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true);  


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

 

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true).client(true);  


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

 

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true).client(false);  
  2. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(false).client(false);  


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

 

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().local(true);  


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

 

 

[java] view plaincopy
 
 
  1. NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().clusterName("your name");  


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

 

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

 

[java] view plaincopy
 
 
  1. /** 
  2.  * Explicit node settings to set. 
  3.  */  
  4. public NodeBuilder settings(Settings.Builder settings) {  
  5.     return settings(settings.build());  
  6. }  
  7.   
  8. /** 
  9.  * Explicit node settings to set. 
  10.  */  
  11. public NodeBuilder settings(Settings settings) {  
  12.     this.settings.put(settings);  
  13.     return this;  
  14. }  


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

 

 

[java] view plaincopy
 
 
  1. Map<String, String> settingMap = new HashMap<String, String>();  
  2. settingMap.put("node.client""false");  
  3. settingMap.put("node.data""true");  
  4. settingMap.put("node.local""true");  
  5. settingMap.put("cluster.name""clasterName");  
  6. settingMap.put("node.name""geloin");  
  7.   
  8. Settings settings = ImmutableSettings.settingsBuilder().put(settingMap).build();  
  9. 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
 
 
  1. NodeBuilder builder = NodeBuilder.nodeBuilder();  
  2. // 设置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>  
  3. Client client = builder.client();  

 

分享到:
评论

相关推荐

    elasticsearch中文文档-基于7.11.zip

    - **节点(Node)**:Elasticsearch运行的单个实例称为节点,节点可以独立工作,也可以与其他节点组成集群。 - **集群(Cluster)**:由多个节点组成的集合,共同存储和处理数据,实现数据的分布式存储和处理。 - **...

    elasticsearch util

    **二、Elasticsearch Util的实例——`es-test`** 在提供的文件名`es-test`中,我们可以推测这可能是一个测试用例或者一个包含测试数据的文件夹。在实际开发中,`es-test`可能会包含以下内容: 1. **测试脚本**:...

    基于SpringBoot技术开发的个人博客系统

    本项目利用了SpringBoot框架,结合Thymeleaf模板引擎、Elasticsearch全文搜索引擎以及JPA(Java Persistence API)进行数据库操作,构建了一个高效且易维护的博客系统。 SpringBoot作为微服务开发的首选框架,简化...

    springrain-master.zip

    4. 监控和日志:Prometheus、Grafana、ELK Stack(Elasticsearch、Logstash、Kibana)等工具,用于系统性能监控和问题排查。 总的来说,SpringRain-master.zip提供的是一套完整的云原生微服务开发实践,涵盖了从...

    kafka_2.12-2.5.0 s scala-2-12.11.tg

    2. Kafka Connect:用于与其他系统(如Hadoop、Elasticsearch)集成,实现数据迁移和实时同步。 3. Kafka MirrorMaker:用于在多个Kafka集群之间复制数据,实现数据备份和故障恢复。 总结,Kafka_2.12-2.5.0与...

    neo4j-enterprise-3.5.16-unix.tar.gz

    同时,它还与其他工具和服务(如Elasticsearch、Hadoop等)有良好的集成,方便进行数据分析和可视化。 8. **安装与配置**: “neo4j-enterprise-3.5.16”目录下的文件包含了所有必要的组件,用户可以通过解压tar.gz...

Global site tag (gtag.js) - Google Analytics