elasticsearch源码分析---索引数据

本文详细探讨了Elasticsearch客户端如何通过Netty与服务器通信,创建索引请求并执行。从client的prepareIndex开始,经过TransportClient、TransportIndexAction到OperationTransportHandler,最终在TransportShardReplicationOperationAction中执行实际的索引操作。在主分片和副本分片上,涉及了版本控制、Lucene的Index操作和映射更新等关键步骤。
摘要由CSDN通过智能技术生成

跟正常的网络通信相似,es的client跟server是通过netty进行通信的,client封装各种request,通过netty发送给es的server。server解析收到的各类request,dispatch到对应的handler中进行处理。

下面我们看一下索引一条数据设计到的代码调用。

客户端当然就是发起请求的了:client.prepareIndex("index","type","id").execute(); 我们假设使用的是TransportClient。过程如下:

prepareIndex会生成一个IndexRequestBuilder,其execute为基类ActionRequestBuilder的调用:

  public void execute(ActionListener<Response> listener) {
        doExecute(listener);
    }

IndexRequestBuilder覆盖doExecute方法:

protected void doExecute(ActionListener<IndexResponse> listener) {
        client.index(request, listener);
    }

调用到client的index方法里边去了,其中client我们使用的TransportClient(里边使用的是InternalTransportClient实例):

  public ActionFuture<IndexResponse> index(IndexRequest request) {
        return internalClient.index(request);
    }

上述调用会进入TranportClient的基类AbstractClient中:

public ActionFuture<IndexResponse> index(final IndexRequest request) {
        return execute(IndexAction.INSTANCE, request);
    }

注意这里的IndexAction已经在Client初始化的时候绑定到了TransportIndexAction

modules.add(new ActionModule(true));

registerA
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值