elasticsearch
文章平均质量分 86
胖柯G
这个作者很懒,什么都没留下…
展开
-
lucene学习-FST源码分析
第三步插入do/17,do和deep有公共字符d可以将字符p和字符e写入FST,这里字符p的flags和上面字符t的flags相同为15,表明arc对应字符是term最后一个字符,arc是当前节点最后一条边,arc连接的两个节点是临近节点不需要记录target,arc的目标节点是一个终止节点,字符e的flags和上面的字符a的flags相同,表明arc是当前节点最后一条边而且arc连接的两个节点是临近节点。将父节点指向冻结后的节点,冻结后的节点就是compileNode,该方法就是将节点转变为冻结节点。原创 2024-08-10 14:11:54 · 111 阅读 · 0 评论 -
elasticsearch源码分析-08Serch查询流程
这里可以看到首先会执行lucene的查询,然后对查询结果进行打分、执行聚合逻辑,然后生成SearchPhaseResult返回。和Get查询一样,请求会经过转发dispatchRequest,查询路由对应的handler处理类,然后执行处理。数据节点查询数据后返回协调节点,我们继续回到executePhaseOnShard方法执行回调。search操作会发送请求到索引下的所有分片,相同分片只会发送到主分片或副本分片。这里收集本集群和跨集群及其他集群需要查询的索引,这里我们主要是分析本集群搜索。原创 2024-08-03 15:11:46 · 324 阅读 · 0 评论 -
elasticsearch源码分析-07GET查询流程
而TransportGetAction继承了TransportSingleShardAction最终调用它的doExecute方法。ES的读取分为Get和search两种,get是根据id从索引中获取内容,而search是根据关键词从倒排索引中获取内容。就是将请求转发到其他节点执行,处理逻辑和上面的逻辑一致,其他节点执行后会把数据返回,然后节点把数据返回给用户请求。获取线程池然后执行,最终都会调用processMessageReceived方法。get请求的处理在actionModule中进行注册。原创 2024-07-27 14:52:27 · 260 阅读 · 0 评论 -
elasticsearch源码分析-06索引恢复
索引恢复allocation阶段最后会向集群发布一个新的集群状态,状态发布后会进入IndicesClusterStateService的applyClusterState应用集群状态@Overridepublic synchronized void applyClusterState(final ClusterChangedEvent event) { if (!lifecycle.started()) { return; } final ClusterSta原创 2024-07-20 23:27:11 · 955 阅读 · 0 评论 -
elasticsearch源码分析-05分片分配
副本分片分配也需要获取一次shard信息,但是之前主分片分配已经获取了一次数据,副本分片分配可以直接使用上次执行获取分片的结果,如果没有node可以分配则查看是否延迟分配,然后执行initialize方法。主分分配器primaryShardAllocator和replicaShardAllocator都继承了BaseGatewayShardAllocator方法,在执行allocateUnassigned时主分片分配和副本分片分配会执行相同的方法,只是会执行不同的决策。原创 2024-07-13 14:05:10 · 577 阅读 · 0 评论 -
elasticsearch源码分析-04集群状态发布
es使用二阶段提交来实现状态发布,第一步是push及先将状态数据发送到node节点,但不应用,如果得到超过半数的节点的返回确认,则执行第二步commit及发送提交请求,二阶段提交不能保证节点收到commit请求后可以正确应用,也就是它只能保证发了commit请求,但是无法保证单个节点上的状态应用是成功还是失败的。回到MasterService的runTasks方法中新的集群状态已经生成并返回,然后判断集群状态和之前的集群状态是否相同,如果发生变化则将进入集群状态发布阶段,将最新的集群状态广播到所有节点。原创 2024-07-06 14:32:45 · 987 阅读 · 0 评论 -
elasticsearch源码分析-03选举集群状态
首先判断只有主节点可以执行状态选举,然后判断是否已经在执行了状态恢复任务了,如果是则直接返回;遍历所有节点选择返回的索引元数据版本最高的节点作为索引级元数据,然后将索引级元数据添加到metadataBuilder中。从磁盘读取构建索引级元数据和集群级元数据,用于构建集群状态对象ClusterState。开始通过版本号选择集群层元数据,比较版本号,选择版本号最大的集群状态。构造集群状态,删除索引信息,下面会选择索引级元数据。我们继续回到每个节点发送请求的返回处理。构造恢复后的集群级元数据和索引级元数据。原创 2024-06-29 12:05:36 · 680 阅读 · 0 评论 -
elasticsearch源码分析-02选举主节点
NodesFaultDetection运行在master节点,master也是定时发送心跳ping请求给非master节点,如果发送失败则先重试,重试达到一定次数调用notifyNodeFailure,如果返回连接错误则调用handleTransportDisconnect(node)如果选择的master节点是本节点加入的节点则设置选举结束。首先会比较两个候选节点的集群状态版本信息,如果版本信息比较新则排在前面,如果版本号相同则需要比较两个节点的节点id,然后选择排在最前面的一个节点为master。原创 2024-06-23 09:45:10 · 870 阅读 · 0 评论 -
elasticsearch源码分析-01服务启动
1.服务启动服务启动入口类为Elasticsearch/*** Main entry point for starting elasticsearch*/public static void main(final String[] args) throws Exception { LogConfigurator.registerErrorListener(); final Elasticsearch elasticsearch = new Elasticsearch();原创 2024-06-15 14:36:17 · 836 阅读 · 0 评论