1、概述
主要是执行一些action或者操作。
其结构图为
AdminClient与ElasticsearchClient关系图为
2、相关client
2.1 ElasticsearchClient
执行通用的action,分为同步和异步的,以及使用的线程池。
方法有
方法 | 说明 | ActionFuture<Response> execute(ActionType<Response> action, Request request) | 执行异步操作 | void execute(ActionType<Response> action, Request request, ActionListener<Response> listener) | 执行同步操作 | ThreadPool threadPool() | 执行时所使用的线程池 |
2.2 Client
客户端提供一个一站式接口,用于对集群执行操作。
其方法有
方法 | 说明 | AdminClient admin() | 可用于执行管理操作的管理客户端 | ActionFuture<IndexResponse> index(IndexRequest request) | 索引与给定索引关联的JSON源 | void index(IndexRequest request, ActionListener<IndexResponse> listener) | 索引与给定索引关联的文档 | IndexRequestBuilder prepareIndex() | 索引与给定索引关联的文档,不带参数,准备索引请求的builder | IndexRequestBuilder prepareIndex(String index) | 索引与给定索引关联的文档,带参数index,准备索引请求的builder | ActionFuture<UpdateResponse> update(UpdateRequest request) | 基于脚本更新文档 | void update(UpdateRequest request, ActionListener<UpdateResponse> listener) | 基于脚本更新文档 | UpdateRequestBuilder prepareUpdate() | 准备基于脚本更新文档的更新请求。 | UpdateRequestBuilder prepareUpdate(String index, String id) | 通过参数index和id,准备基于脚本更新文档的更新请求。 | ActionFuture<DeleteResponse> delete(DeleteRequest request) | 根据索引和id从索引中删除文档 | void delete(DeleteRequest request, ActionListener<DeleteResponse> listener) | 根据索引和id从索引中删除文档 | DeleteRequestBuilder prepareDelete() | 根据索引和id创建删除请求 | DeleteRequestBuilder prepareDelete(String index, String id) | 根据索引和id创建删除请求 | ActionFuture<BulkResponse> bulk(BulkRequest request) | 批量索引/删除操作 | void bulk(BulkRequest request, ActionListener<BulkResponse> listener) | 批量索引/删除操作 | BulkRequestBuilder prepareBulk() | 执行大量索引/删除操作 | BulkRequestBuilder prepareBulk(String globalIndex) | 使用默认索引执行大量索引/删除操作 | ActionFuture<GetResponse> get(GetRequest request) | 获取根据id索引的文档 | void get(GetRequest request, ActionListener<GetResponse> listener) | 获取根据id索引的文档 | GetRequestBuilder prepareGet() | 准备获取索引文档请求 | GetRequestBuilder prepareGet(String index, String id) | 根据索引及id准备获取索引文档请求 | ActionFuture<MultiGetResponse> multiGet(MultiGetRequest request) | 获取多文档? | void multiGet(MultiGetRequest request, ActionListener<MultiGetResponse> listener) | 获取多文档? | MultiGetRequestBuilder prepareMultiGet() | 准备多文档请求 | ActionFuture<SearchResponse> search(SearchRequest request) | 搜索 | void search(SearchRequest request, ActionListener<SearchResponse> listener) | 搜索 | SearchRequestBuilder prepareSearch(String... indices) | 准备搜索请求 | ActionFuture<SearchResponse> searchScroll(SearchScrollRequest request) | 搜索滚动请求,以继续搜索以前的可滚动搜索请求 | void searchScroll(SearchScrollRequest request, ActionListener<SearchResponse> listener) | 搜索滚动请求 | ?SearchScrollRequestBuilder prepareSearchScroll(String scrollId) | 准备搜索滚动请求 | ActionFuture<MultiSearchResponse> multiSearch(MultiSearchRequest request) | 多搜索请求 | void multiSearch(MultiSearchRequest request, ActionListener<MultiSearchResponse> listener) | 多搜索请求 | ?MultiSearchRequestBuilder prepareMultiSearch() | 准备多搜索请求 | ActionFuture<TermVectorsResponse> termVectors(TermVectorsRequest request) | 返回特定文档的术语向量的操作 | void termVectors(TermVectorsRequest request, ActionListener<TermVectorsResponse> listener) | 返回特定文档的术语向量的操作 | TermVectorsRequestBuilder prepareTermVectors() | 准备特定文档的术语向量请求 | TermVectorsRequestBuilder prepareTermVectors(String index, String id) | 准备特定文档的术语向量请求 | ActionFuture<MultiTermVectorsResponse> multiTermVectors(MultiTermVectorsRequest request) | 多获取项向量 | void multiTermVectors(MultiTermVectorsRequest request, ActionListener<MultiTermVectorsResponse> listener) | 多获取项向量 | MultiTermVectorsRequestBuilder prepareMultiTermVectors() | 准备多获取项向量请求 | ExplainRequestBuilder prepareExplain(String index, String id) | 准备explain请求 | ActionFuture<ExplainResponse> explain(ExplainRequest request) | 计算指定请求的分数解释 | void explain(ExplainRequest request, ActionListener<ExplainResponse> listener) | 计算指定请求的分数解释 | ClearScrollRequestBuilder prepareClearScroll() | 准备清除与指定滚动ID关联的搜索上下文请求 | ActionFuture<ClearScrollResponse> clearScroll(ClearScrollRequest request) | 清除与指定滚动ID关联的搜索上下文 | void clearScroll(ClearScrollRequest request, ActionListener<ClearScrollResponse> listener) | 清除与指定滚动ID关联的搜索上下文 | FieldCapabilitiesRequestBuilder prepareFieldCaps(String... indices) | 准备现场能力请求生成器请求 | ActionFuture<FieldCapabilitiesResponse> fieldCaps(FieldCapabilitiesRequest request) | 从提供的请求返回现场能力的操作 | ?void fieldCaps(FieldCapabilitiesRequest request, ActionListener<FieldCapabilitiesResponse> listener) | 从提供的请求返回现场能力的操作 | Settings settings() | 客户端配置 | Client filterWithHeader(Map<String, String> headers) | 返回一个新的轻量级客户端,该客户端将所有给定的头应用于它发出的每个请求 | default Client getRemoteClusterClient(String clusterAlias)? | 默认方法,将客户端返回到具有给定群集别名的远程群集 |
2.3 AbstractClient
是Client的抽象实现类,实现了ElasticsearchClient中的execute方法,最终会执行doExecute抽象方法。
方法 | 说明 | void doExecute(ActionType<Response> action, Request request, ActionListener<Response> listener) | ActionType为其它具体Action的父类,Request为ActionRequest的子类,listenere为响应的临听器。 |
其处理时序为?
?支持的命令有index,update,delete,bulk,get,multiGet,search,searchScroll,?multiSearch,?termVectors,multiTermVectors,explain,clearScroll,fieldCaps,具体命令是通过调用execute方法执行,最终是调用子类的doExecute来执行具体的命令操作。
2.4 NodeClient
是执行当前所在node节点的action的客户端。
其成员有
成员 | 说明 | Map<ActionType, TransportAction> actions | 行为类型与行为之间的映射关系 | TaskManager taskManager | 任务管理器 | Supplier<String> localNodeId | 本地节点提供者 | Transport.Connection localConnection | 本地连接 | RemoteClusterService remoteClusterService | 远端集群服务 | NamedWriteableRegistry namedWriteableRegistry | 有名写的注册器 |
2.4.1?initialize
用于初始化成员。其是Node节点启动时初始化的
2.4.2?doExecute?
其执行具体的行为逻辑。调用executeLocally。
public < Request extends ActionRequest,
Response extends ActionResponse
> Task executeLocally(ActionType<Response> action, Request request, ActionListener<Response> listener) {
return taskManager.registerAndExecute("transport", transportAction(action), request, localConnection,
(t, r) -> {
try {
listener.onResponse(r);
} catch (Exception e) {
assert false : new AssertionError("callback must handle its own exceptions", e);
throw e;
}
}, (t, e) -> {
try {
listener.onFailure(e);
} catch (Exception ex) {
ex.addSuppressed(e);
assert false : new AssertionError("callback must handle its own exceptions", ex);
throw ex;
}
});
}
(1)通过transportAction来根据actionType得到具体的TransportAction
(2)执行TaskManager#registerAndExecute注册任务,然后调用TransportAction#execute来执行行为。
2.4.3 TaskManager
用于跟踪节点上正在运行的任务。
其成员有
成员 | 说明 | ConcurrentMapLong<Task> tasks | taskId与Task的映射关系 | ConcurrentMapLong<CancellableTaskHolder> cancellableTasks | 支持取消的任务持有者 | AtomicLong taskIdGenerator | taskId生成器 |
方法有
方法 | 说明 | Task register(String type, String action, TaskAwareRequest request) | 注册任务,根据情况注册普通任务或者可以取消的任务 | Task registerAndExecute(String type, TransportAction<Request, Response> action, Request request, Transport.Connection localConnection, ? ? ? ? ? ? ? ? ? ? ? ? ? ? BiConsumer<Task, Response> onResponse, BiConsumer<Task, Exception> onFailure) | 注册任务后,执行action | Task unregister(Task task) | 处理响应或者异常失败时会注销任务 |
2.5 FilterClient?
是AbstractClient的子类,也是抽象类。作为AbstractClient的装饰器,提供功能增强
|