Elasticsearch Java API 客户端连接
 一个是TransportClient,一个是NodeClient,还有一个XPackTransportClient
  作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。
  作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的。
  服务安装了 x-pack 插件
  重要:客户端版本应该和服务端版本保持一致
 
  TransportClient旨在被Java高级REST客户端取代,该客户端执行HTTP请求而不是序列化的Java请求。 在即将到来的Elasticsearch版本中将不赞成使用TransportClient,建议使用Java高级REST客户端。
 
  上面的警告比较尴尬,但是在 5xx版本中使用还是没有问题的,可能使用rest 客户端兼容性更好做一些。
 
 Elasticsearch Java Rest API 手册
 Maven Repository
 Elasticsearch Java API包已经上传到 Maven Central
 在pom.xml文件中增加:
  transport 版本号最好就是与Elasticsearch版本号一致。
 
 <dependency>     <groupId>org.elasticsearch.client</groupId>     <artifactId>transport</artifactId>     <version>5.6.3</version> </dependency> 
 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
 
 所有实例 已经上传到Git
 XPackTransportClient
 如果 ElasticSearch 服务安装了 x-pack 插件,需要PreBuiltXPackTransportClient实例才能访问
 使用Maven管理项目,把下面代码增加到pom.xml;
  一定要修改默认仓库地址为https://artifacts.elastic.co/maven ,因为这个库没有上传到Maven中央仓库,如果有自己的 maven ,请配置代理
 
 <project ...>     <repositories>       <!-- add the elasticsearch repo -->       <repository>          <id>elasticsearch-releases</id>          <url>https://artifacts.elastic.co/maven</url>          <releases>             <enabled>true</enabled>          </releases>          <snapshots>             <enabled>false</enabled>          </snapshots>       </repository>       ...    </repositories>    ...     <dependencies>       <!-- add the x-pack jar as a dependency -->       <dependency>          <groupId>org.elasticsearch.client</groupId>          <artifactId>x-pack-transport</artifactId>          <version>5.6.3</version>       </dependency>       ...    </dependencies>    ...   </project> 
 实例
  /**  * 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
 
 所有实例 已经上传到Git
 更多请浏览 spring-boot-starter-es 开源项目
  如何有任何问题请关注微信公众号给我留言
 
 