TransportDeleteAction 执行索引删除操作
从ES中删除一个文档的过程如下: 先从主分片中执行删除操作,再在所有的副本分片上执行删除操作。 所以核心流程分三步:
s1: 从请求节点路由到主分片节点。
s2: 在主分片节点执行删除操作。
s3: 在所有的副本分片上执行删除操作。
关于删除,ES提供的是delete by id
的思路。 早期ES是支持通过query批量删除的,后来觉得这个功能太过危险,就将delete by query
做成了Plugin, 由用户自行安装插件后才能使用。 关于ES批量删除的思路,可以参考delete by query
插件的源码,大体思路是通过scroll query
按条件查询出doc id, 然后使用client.bulk()
进行删除
TransportFlushAction 索引flush,数据从filesystem cache刷新到磁盘,核心逻辑在SyncedFlushService
当向elasticsearch发送创建document索引请求的时候,document数据会先进入到index buffer之后,与此同时会将操作记录在translog之中,当发生refresh时(数据从index buffer中进入filesystem cache的过程)translog中的操作记录并不会被清除,而是当数据从filesystem cache中被写入磁盘之后才会将translog中清空。而从filesystem cache写入磁盘的过程就是flush