实时检索要求前一毫秒把文档写入索引,后一毫秒就能够检索出来。
什么存储设备速度快?内存。所以实时检索的实现,都把新增的数据放到内存里面。
下面是一个基本的实时检索的结构:
写入文档的时候,文档会被写入到内存索引;
删除文档的时候,删除会同时提交给内存索引和磁盘索引,磁盘索引使用一个常驻内存的删除Bitmap 来标志删除;
在查询的时候,把磁盘索引的结果进行删除过滤后,和内存索引的结果合并。
这里有一个需要注意的问题:排序。应该先分别从内存和磁盘获得一定数据,然后根据数据的权重进行合并,得到一个最后的结果。