动态全文索引
动态索引
在真实环境中,搜索引擎需要处理的文档集合内有些文档可能被删除或者内容被修改。如果要在内容被删除或修改之后马上在搜索结果中体现出来,动态索引可以实现这种实时性需求。动态索引有三个关键的索引结构:倒排索引、临时索引和已删除文档列表。临时索引:在内存中实时建立的倒排索引,当有新文档进入系统时,实时解析文档并将其追加进这个临时索引结构中。已删除列表:存储已被删除的文档的相应文档
索引更新策略
动态索引可以满足实时搜索的需求,但是随着加入文档越来越多,临时索引消耗的内存也会随之增加。因此要考虑将临时索引的内容更新到磁盘索引中,以释放内存空间来容纳后续的文档,此时就需要考虑合理有效的索引更新策略。
Complete Re-Build: 完全重建策略
对所有文档重新建立索引。新索引建立完成后,老的索引被遗弃释放,之后对用户查询的响应完全由新的索引负责。在重建过程中,内存中仍然需要维护老的索引对用户的查询做出响应。如图所示

Re-Merge: 再合并策略
有新文档进入搜索系统时,搜索系统在内存维护临时倒排索引来记录其信息,当新增文档达到一定数量,或者指定大小的内存被消耗完,则把临时索引和老文档的倒排索引进行合并,以生成新的索引。过程如下图所示

更新步骤
In-Place: 原地更新策略
原地更新策略的出发点是为了解决再合并策略的缺点。在索引合并时,并不生成新的索引文件,而是直接在原先老的索引文件里进行追加操作,将增量索引里单词的倒排列表项追加到老索引相应位置的末尾,这样就可达到上述目标,即只更新增量索引里出现的单词相关信息,其他单词相关信息不变动。为了能够支持追加操作,原地更新策略在初始建立的索引中,会在每个单词的倒排列表末尾预留出一定的磁盘空间,这样,在进行索引合并时,可以将增量索引追加到预留空间中。如下图

实验数据证明,原地更新策略的索引更新效率比再合并策略低,原因
Hybrid: 混合策略
将单词根据其不同性质进行分类,不同类别的单词,对其索引采取不同的索引更新策略。常见做法:根据单词的倒排列表长度进行区分,因为有些单词经常在 不同文档中出现,所以其对应的倒排列表较长,而有些单词很少见,则其倒排列表就较短。根据这一性质将单词划分为长倒排列表单词和短倒排列表单词。长倒排列 表单词采取原地更新策略,而短倒排列表单词则采取再合并策略。因为长倒排列表单词的读