索引过程

 

1 IndexRequest

 

elasticsearch 索引过程_第1张图片

 

UUID工具自动生成一个uuid,代码在IndexRequestprocess方法内。

 

2TransportIndexAction

wKioL1muDhfAHjJAAABN_PUlrWw347.png-wh_50

 

根据索引数据的id、类型以及索引分片信息进行哈希取模,确定把该条数据分配到那个分片。

 

elasticsearch 索引过程_第2张图片

 

3. 并找到数据要分配到的分片的主分片,先把索引请求提交到主分片处理

elasticsearch 索引过程_第3张图片

 

路由校验,然后获取主share的信息,executeIndexRequestOnPrimary是最重要的方法

 

4.创建索引文档结构体

elasticsearch 索引过程_第4张图片

判断索引操作的类型,索引操作有两种,一种是INDEX一种是CREATE

wKiom1muD_SRkolsAAB9VVPma4w334.png-wh_50

 

5. 如果不是主分片,抛出异常

wKioL1muD_yDTxCzAABO-QsR98g962.png-wh_50

 

6. 判断文档是否自动创建,如果是开始解析文档结构

elasticsearch 索引过程_第5张图片

 

7. 如果是动态文档,增加mapping映射,否则返回Index对象

wKiom1muEI6iVAAmAABTYe0Sy_s388.png-wh_50

 

8. 如果是创建

elasticsearch 索引过程_第6张图片

 

与上面类似,只是多了一个id

wKiom1muEOWwCLY6AAAmH5axqME711.png-wh_50

 

 

9.返回到主方法

elasticsearch 索引过程_第7张图片

 

如果是需要创建文档结构,先创建文档结构

 

wKioL1muESuB61i2AAA-5xiSOK8277.png-wh_50

 

创建完后,二次校验一下,是否创建成功

 

10. 调用创建文档接口

elasticsearch 索引过程_第8张图片

 

 

11. 检验是否可写状态 刷新最后更新时间,并启动状态检查

elasticsearch 索引过程_第9张图片

 

12 调用luence


elasticsearch 索引过程_第10张图片

 elasticsearch 索引过程_第11张图片


13 如果是创建 addDocuments如果是更新updateDocuments

 

elasticsearch 索引过程_第12张图片

 

14 增加其实也是更新操作

elasticsearch 索引过程_第13张图片

 

15. 剩下是记录log和一些统计信息

 

Translog.LocationtranslogLocation =translog.add(new Translog.Index(index));

elasticsearch 索引过程_第14张图片

 

16. 里面还有很多锁,还没有看懂!!!