动态索引示意图:
在如上图的动态索引中,有三个关键的索引结构:倒排索引、临时索引和已删除文档列表。
倒排索引:就是对初始文档集合建立好的索引结构,一般单词词典存储在内存中,对应的倒排列表存储在磁盘文件中。
临时索引:在内存中实时建立的倒排索引,其结构和倒排索引时一样的。当有新文档进入系统时,实时解析文档并将其追加进这个临时索引结构中。
已删除文档列表:用来存储已被删除的文档的相应文档ID,形成一个文档ID列表。当一篇文档内容被更改,可以认为是旧文档先被删除,之后向系统内增加一篇新的文档。
实现过程
当系统发现有新文档进入时,立即将其加入临时索引中。有文档被删除时,则将其加入删除文档队列。文档被更改时,则将旧文档加入删除队列,解析更新后的文档内容,并将其加入临时索引中。通过这种方式满足实时性的要求。
如果用户输入查询请求,则搜索引擎同时从倒排索引和临时索引中读取用户查询单词的倒排列表,找到包含用户查询的文档集合,并对两个结果进行合并,之后利用删除文档列表进行过滤,将搜索结果中那些已经被删除的文档从结果中过滤,形成最终的搜索结果,并返回给用户。这样就能够实现动态环境下的准实时搜索功能。
问题:如果搜索的结果中包含已修改的文档,是不是会因为其在删除文档列表中而将其过滤掉。
参考文献:
[1] 张俊林. 这就是搜索引擎[M]. 电子工业出版社, 2012.