LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(1——项目框架)
基于正倒排索引的boost搜索引擎
- 项目架构
- 一、项目结构与技术栈
- 二、开发流程概述
- 1. 数据准备与解析(Parser模块)
- 2. 索引构建(Index模块)
- 4. HTTP服务模块(Server模块)
- 5. 前端界面(Frontend模块)
项目架构
一、项目结构与技术栈
技术栈:C++11、STL、Boost、Jsoncpp、cppjieba、cpp-httplib
前端:HTML5 + CSS + JavaScript + jQuery + Ajax
环境:CentOS 7(或其他)、gcc/g++、Makefile、VS Code/VS2019
二、开发流程概述
1. 数据准备与解析(Parser模块)
输入:Boost官网HTML文档(比如boost_1_78_0/doc/html/*.html)
下载之后可以用lrzsz命令发送到云服务,用tar解压,然后把里面的html文件夹复制出来,获取数据。
输出:去标签后的干净文本,格式为:title\3content\3url\n
以\3为分隔符分割属性,以\n分割不用的html文档。标题,内容,原官网文档链接。
步骤:
-
递归遍历HTML文件目录
-
提取每个文件的标题(title)、内容(去标签)、URL(拼接官网路径)
-
保存为结构化文本文件(比如raw.txt)
ps:下载boost准标准库 sudo apt install libboost-all-dev
2. 索引构建(Index模块)
a. 正排索引(Forward Index)
结构:vector
每个文档包含:doc_id, title, content, url
功能:通过doc_id快速获取文档内容
b. 倒排索引(Inverted Index)
结构:unordered_map<string, vector<InvertedElem>>
InvertedElem包含:doc_id, word, weight
功能:通过关键词快速获取包含该词的文档列表
c. 索引构建流程:
读取raw.txt,逐行解析
对每个文档的title和content进行分词(使用cppjieba)
统计词频,计算权重(如:标题中出现的词权重更高)
构建正排和倒排索引
3. 搜索引擎模块(Searcher模块)
初始化:加载索引文件
搜索流程:
对用户查询词进行分词
根据每个词在倒排索引中查找文档ID列表
合并结果,按权重排序
生成摘要(从正文中提取包含关键词的片段)
返回JSON格式结果(使用Jsoncpp)
4. HTTP服务模块(Server模块)
使用cpp-httplib搭建HTTP服务器
提供两个接口:
GET /:返回前端页面
GET /s?word=xxx:处理搜索请求,返回JSON结果
部署在CentOS上,监听指定端口(如8081)
5. 前端界面(Frontend模块)
HTML结构:搜索框 + 结果列表
CSS样式:美化页面,响应式布局
JavaScript/jQuery:处理用户输入、发起Ajax请求、动态渲染结果
与后端通过JSON交互,支持点击跳转至原文档URL