【一】Jieba 分词工具
在使用倒排索引时需要用到关键词,这些关键词由每个 HTML 文档的标题和内容生成,因此涉及分词处理。本项目使用 cppjieba 分词工具完成该功能。
若需使用 cppjieba 分词工具,可通过 Git 命令上传至本地服务器,并建立软链接指向头文件和词库目录。
【二】正/倒排索引结构设计
//正排结构
typedef struct Forward_index {
//文档内容
std::string title;
std::string source;
std::string chain;
//对应正排 ID
uint64_t doc_id;
} Forwardindex;
//倒排结构
typedef struct Inverted_index {
//对应正排 ID
int doc_id;
//涉及到的关键字
std::string word;
//权重
int weight;
} Invertedindex;
正排:根据 ID 映射对应的文档(标题、内容、URL),ID 利用 vector 下标存储。
倒排:根据关键字映射对应的 ID,利用 unordered_map 的快速搜索特性。
//正排存储
std::vector<Forwardindex> Forward;
typedef std::vector<Invertedindex> Stock_Inverted;
//倒排存储
std::unordered_map<std::string,Stock_Inverted> Inverted;
【三】关键函数设计
(1)由文档 ID 返回文档内容
含义:正排外部实现,根据 ID 返回 vector 中对应的具体内容。
//根据 ID 返回文档内容
Forwardindex* GetForward_index(const long long& id) {
if(id >= Forward.size()) {
std::cerr << "GetForward_index is errno" << std::endl;
return nullptr;
}
return &Forward[id];
}


