测试数据来自ClueWeb09B数据集,其样本存储在目录./test_data
中用于测试目的。当开始构建索引时,程序读入压缩的前向索引,将其解压缩并生成位置发布。职位过帐被计数以生成非职位过帐。
职位过账和非职位过账分别存储在两个STL向量中。当向量达到一定大小(例如 500)时,两个向量都会被压缩并清空。在磁盘上的disk_index
目录下创建两个文件来存储压缩的二进制数组。重复此过程,直到剩下的帖子少于 500 个。剩余的帖子作为动态索引存储在内存中。
到目前为止,仅实现了一种形式的编码方法。当 method 等于 1 时,使用可变字节编码来压缩发布。我的索引中使用的可变字节规则如下:
每个文件的名称包含两部分:前缀和数字。位置索引存储在文件“Z0”、“Z1”、...“Zn”、“I0”、“I1”、...“In”中。压缩后,索引器检查磁盘上是否存在“Z0”。如果“Z0”不退出,则创建“Z0”并将索引写入“Z0”。如果“Z0”存在,则索引将写入“I0”。对于非位置索引,如果不存在,则检查“X0”并写入。否则,非位置索引将写入“L0”。术语ID存储在相应文件的文件元数据中。术语的元数据存储文件名以及开始和结束位置。
具有相同索引号的两个文件永远不能在磁盘上永久共存。每当 500 个记录写入磁盘后,索引器就会检查是否有两个文件具有相同的索引号。如果存在,则将两个文件合并为一个新文件,并将索引号加1。这个过程称为对数合并。例如,如果“Z0”和“I0”都存在,则将它们组合并写入“Z1”,如果磁盘上已存在“Z1”,则将它们组合并写入“I1”。重复此过程,直到磁盘上没有“I”文件为止。元数据会相应更新。
接收新的帖子并将其存储在动态索引中。由凭证分析器生成的过帐称为外部过帐,而要存储在内存中的过帐称为内部过帐。当内存中有 500 个帖子时,它会使用与构建索引相同的方法进行压缩。
indexer.cpp
中的两个错误,并且可以在同一个文件中优化两个函数./initialize.sh
创建存储磁盘索引的目录并确保该目录为空make
调用 makefile ./INDEX
开始构建索引