96818 发表于 2019-1-29 07:16:57

elasticsearch 索引过程

  索引过程
  
  1 IndexRequest
  
https://s3.运维网.com/wyfs02/M02/A4/93/wKioL1muDdLTji79AAAnGz-DNzg691.png-wh_500x0-wm_3-wmp_4-s_2504146202.png
  UUID工具自动生成一个uuid,代码在IndexRequest的process方法内。
  
  2TransportIndexAction
https://s2.运维网.com/wyfs02/M00/A4/93/wKioL1muDhfAHjJAAABN_PUlrWw347.png-wh_500x0-wm_3-wmp_4-s_2356505179.png
  根据索引数据的id、类型以及索引分片信息进行哈希取模,确定把该条数据分配到那个分片。
  
https://s5.运维网.com/wyfs02/M02/A4/93/wKioL1muDw6gBbY1AACH81v0LZE926.png-wh_500x0-wm_3-wmp_4-s_4139209379.png
  3. 并找到数据要分配到的分片的主分片,先把索引请求提交到主分片处理
https://s1.运维网.com/wyfs02/M02/A4/93/wKioL1muD3KTfoNIAACXNbnI2j8430.png-wh_500x0-wm_3-wmp_4-s_2613939314.png
  路由校验,然后获取主share的信息,executeIndexRequestOnPrimary是最重要的方法
  4.创建索引文档结构体
https://s5.运维网.com/wyfs02/M01/05/E2/wKiom1muD8Sj2QlDAADUo4MeRKA808.png-wh_500x0-wm_3-wmp_4-s_1645010620.png
  判断索引操作的类型,索引操作有两种,一种是INDEX一种是CREATE
https://s4.运维网.com/wyfs02/M02/05/E2/wKiom1muD_SRkolsAAB9VVPma4w334.png-wh_500x0-wm_3-wmp_4-s_277495641.png
  5. 如果不是主分片,抛出异常
https://s2.运维网.com/wyfs02/M02/A4/93/wKioL1muD_yDTxCzAABO-QsR98g962.png-wh_500x0-wm_3-wmp_4-s_987426457.png
  6. 判断文档是否自动创建,如果是开始解析文档结构
https://s2.运维网.com/wyfs02/M00/05/E2/wKiom1muEFyRZ10iAABZkSNJF_o321.png-wh_500x0-wm_3-wmp_4-s_1245220809.png
  7. 如果是动态文档,增加mapping映射,否则返回Index对象
https://s4.运维网.com/wyfs02/M02/05/E2/wKiom1muEI6iVAAmAABTYe0Sy_s388.png-wh_500x0-wm_3-wmp_4-s_2902064472.png
  8. 如果是创建
https://s4.运维网.com/wyfs02/M01/A4/93/wKioL1muEJvBclZ0AABVkDZIhZs955.png-wh_500x0-wm_3-wmp_4-s_1154215581.png
  与上面类似,只是多了一个id
https://s3.运维网.com/wyfs02/M00/05/E2/wKiom1muEOWwCLY6AAAmH5axqME711.png-wh_500x0-wm_3-wmp_4-s_150684285.png
  9.返回到主方法
https://s1.运维网.com/wyfs02/M01/A4/93/wKioL1muEPrhIBwJAADHdLcTagc220.png-wh_500x0-wm_3-wmp_4-s_1322832909.png
  如果是需要创建文档结构,先创建文档结构
https://s4.运维网.com/wyfs02/M00/A4/93/wKioL1muESuB61i2AAA-5xiSOK8277.png-wh_500x0-wm_3-wmp_4-s_803996972.png
  创建完后,二次校验一下,是否创建成功
  10. 调用创建文档接口
https://s1.运维网.com/wyfs02/M00/A4/93/wKioL1muEViAgr48AAC_OjiA3Dg863.png-wh_500x0-wm_3-wmp_4-s_263618126.png
  11. 检验是否可写状态 刷新最后更新时间,并启动状态检查
https://s1.运维网.com/wyfs02/M01/A4/93/wKioL1muEYeRlj8HAABgYDbKBCw237.png-wh_500x0-wm_3-wmp_4-s_777791212.png
  12 调用luence
  

https://s1.运维网.com/wyfs02/M02/05/E3/wKiom1muEkDyIshXAABiGthTxmI906.png-wh_500x0-wm_3-wmp_4-s_349930988.png
https://s5.运维网.com/wyfs02/M01/A4/94/wKioL1muElzjVbilAABKgv7e6mw490.png-wh_500x0-wm_3-wmp_4-s_2985269917.png
  

  13 如果是创建 addDocuments,如果是更新updateDocuments。
https://s3.运维网.com/wyfs02/M02/05/E3/wKiom1muEqexJ7Y1AACTNinwfxY811.png-wh_500x0-wm_3-wmp_4-s_1479378639.png
  14 增加其实也是更新操作
https://s1.运维网.com/wyfs02/M02/A4/94/wKioL1muErWyTRg6AACpwQun8Kk208.png-wh_500x0-wm_3-wmp_4-s_3778990752.png
  15. 剩下是记录log和一些统计信息
  Translog.LocationtranslogLocation =translog.add(new Translog.Index(index));
https://s2.运维网.com/wyfs02/M00/A4/94/wKioL1muEuyQUv8rAABS8rsX3XI458.png-wh_500x0-wm_3-wmp_4-s_3788299270.png
  16. 里面还有很多锁,还没有看懂!!!
  




页: [1]
查看完整版本: elasticsearch 索引过程