ElasticSearch提供了NodeClient,Transport方式。
NodeClient这种方式相当于创建了一个节点,放入集群中,这个节点不存储数据,并且不能作为主节点,因为是一个节点,它知道整个集群的状态(每个节点在哪,哪些分片在哪个节点上等),这意味着它执行API时不会出现”连跳”。
TransportClient不创建节点,它存在于集群外部,类似于REST客户端,只是充当ES集群和你的应用的通信层,它知道API,并且能够在节点间自动轮循、帮你嗅探集群等。
Transport方式的好处是:
性能更高
本地资源消耗更少
内置连接池
当然也有缺点
当初始化连接时,ElasticSearch必须已启动,且必须知道集群中一个节点的IP地址和端口;
可能存在"连跳",浪费一定的网络资源
如果应用的是java语言,一般通过Transport优于node
elasticsearch1.7版本的TransportClient
Settings settings = ImmutableSettings.settingsBuilder().put("自己的配置","同前").build();
TransportClient esclient = new TransportClient(settings);
esclient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("自己的ip"), 应用的端口号));
elasticsearch 5.*版本的TransportClient
Settings settings=Settings.builder().put("自己的配置","同前").build();
TransportClient client=null;
try {
client= new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(("自己的ip"), 应用的端口号));
}catch(Exception e){
}