索引过程
1 IndexRequest
UUID工具自动生成一个uuid,代码在IndexRequest的process方法内。
2TransportIndexAction
根据索引数据的id、类型以及索引分片信息进行哈希取模,确定把该条数据分配到那个分片。
3. 并找到数据要分配到的分片的主分片,先把索引请求提交到主分片处理
路由校验,然后获取主share的信息,executeIndexRequestOnPrimary是最重要的方法
4.创建索引文档结构体
判断索引操作的类型,索引操作有两种,一种是INDEX一种是CREATE
5. 如果不是主分片,抛出异常
6. 判断文档是否自动创建,如果是开始解析文档结构
7. 如果是动态文档,增加mapping映射,否则返回Index对象
8. 如果是创建
与上面类似,只是多了一个id
9.返回到主方法
如果是需要创建文档结构,先创建文档结构
创建完后,二次校验一下,是否创建成功
10. 调用创建文档接口
11. 检验是否可写状态 刷新最后更新时间,并启动状态检查
12 调用luence
13 如果是创建 addDocuments,如果是更新updateDocuments。
14 增加其实也是更新操作
15. 剩下是记录log和一些统计信息
Translog.LocationtranslogLocation =translog.add(new Translog.Index(index));
16. 里面还有很多锁,还没有看懂!!!
原文链接:http://blog.51cto.com/12597095/1962754