与Elasticsearch交互的客户端

Posted andywu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与Elasticsearch交互的客户端相关的知识,希望对你有一定的参考价值。

1.访问ES的方式

访问es的方式有两种,一种是http方式,还有一种是java客户端方式。

其中Java客户端又分为:
1.1.Node client:

节点客户端实际上是一个集群中的节点(但不保存数据,不能成为主节点)。因为它是一个节点,它知道整个集群状态(所有节点驻留,分片分布在哪些节点,数据在集群中的具体位置等等),这意味着它可以执行 APIs 而且少了一个网络跃点。能够直接转发请求到对应的节点上。

1.2.Transport Client:

传输客户端作为一种轻量级客户端,本身不加入集群,只是简单的发送请求到远端集群中的节点,作为一个集群和应用程序之间的通信层。它知道 API 并能自动帮你在节点之间轮询,帮你嗅探集群等等。但它是集群 外部的 ,和 REST 客户端类似。我们访问的节点负责收集各节点返回的数据(query fetch merge),最后一起返回给客户端。

构造transportClient时候,需要指定sniff是否为true

if (this.settings.getAsBoolean("client.transport.sniff", false)) 
   { this.nodesSampler = new SniffNodesSampler(); } 
else { this.nodesSampler = new SimpleNodeSampler(); } 

 

这里先提一下:节点通信有5种类型:Recovery Bulk Reg State Ping

SniffNodesSampler:client会主动发现集群里的其他节点,会创建fully connect(每两个节点间建立5种连接)

SimpleNodeSampler:ping listedNodes中的所有node,区别在于这里创建的都是light connect(简单的ping和查询连接) 

 

注意:在ES7中不建议使用Transport Client,在ES8中去除Transport Client用Java High Level REST Client代替

访问远端集群,尽量以轮询方式访问目标节点

 

2.如何选择JAVA客户端
如果要将应用程序和 Elasticsearch 集群进行解耦,传输客户端是一个理想的选择。例如,如果您的应用程序需要快速的创建和销毁到集群的连接,传输客户端比节点客户端”轻”,因为它不是一个集群的一部分。类似地,如果您需要创建成千上万的连接,你不想有成千上万节点加入集群。传输客户端( TC )将是一个更好的选择。
另一方面,如果你只需要有少数的、长期持久的对象连接到集群,客户端节点可以更高效,因为它知道集群的布局。但是它会使你的应用程序和集群耦合在一起,所以从防火墙的角度,它可能会构成问题。

 

以上是关于与Elasticsearch交互的客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?

elasticsearch代码片段,及工具类SearchEsUtil.java

elasticsearch插件一——-head插件安装详解

ElasticSearch 索引创建

Spring Data集成Elasticsearch

elasticsearch权威指南笔记2 - 简单使用