第4章 索引结构(Index construction)
4.1 硬件基础知识(Hardware basics)
√为了最大化数据传输速率,一起读取的数据块应在磁盘上连续存储。
√操作系统通常读取和写入整个区块,常见的的块大小是8、16、32和64 KB(KB)。
√从磁盘到内存的数据传输由系统总线处理,处理器可以在磁盘输入/输出过程中处理数据。√可在磁盘上存储压缩数据来加速数据传输。
回顾倒排索引构建:通过集合组装所有的term-docID对。term作为主键,docID作为辅助键进行排序,最后将每个词项的docID组织到一个倒排记录表中,并计算诸如词项和文档频率之类的统计数据。
对于小的集合,可在内存中完成。而对于大型集合,内存无法满足时,需要使用辅助存储器。
4.2 基于块的排序索引(Blocked sort-based indexing)
·基于块的排序索引算法BSBI(blocked sort-based indexing algorithm):该算法将文档解析为termID-docID对,并将它们在内存中积累,直到固定大小的块被填满。选择块大小来适应内存,以允许快速的内存排序。然后这个块被倒排并写到磁盘上。
√ 步骤:
(1)将集合分割成大小相等的部分;
(2)对内存中每个部分的词项ID-文档ID对排序;
(3)将中间排序的结果存储在磁盘上;
(4)将所有中间结果合并到最终索引中。
√ 合并:为进行合并,同时打开所有块文件,并为正在访问的区块维护小的读缓冲区,以及正在编写的最终合并索引的写缓冲区。在每次迭代中,使用优先队列或类似数据结构选择尚未处理的最低词项ID。这个词项ID的所有倒排记录表列表都被读取和合并,合并后的列表被写回磁盘。必要时,每个读取缓冲区都从其文件中重新填充。
√ Eg.把这个应用到路透社-rcv1。
假设将1000万个词项ID-文档ID对到内存中,最终得到10个块,每一个都是集合的一个部分的倒排索引。在最后一步中,算法同时将10个块合并到一个大的合并索引中。
图4.1基于块的排序索引。文件中存储反向块并在中存储合并的索引。
图4.2合并基于块的排序索引。两个块从磁盘加载到内存