立项原因:开发者查阅 Boost C++ 库官方文档时,官网自带搜索对中文 / 长查询支持弱、结果排序粗糙,且约 8000 篇 HTML 文档散落在多层目录中,靠浏览器 Ctrl+F 无法跨页定位。本项目面向垂直技术文档库这一细分场景,搭建一个离线索引 + 在线检索的站内搜索引擎。
行业场景与业务背景:在编程开发与技术支持领域,官方 API 文档体量通常在数千到数万页,开发者需要按关键词毫秒级定位到具体类、函数、头文件说明页。传统通用搜索引擎(Google/Bing)对站内长文召回不准、噪声多,而轻量全文索引方案(如本机 recoll、DocFetcher)缺乏 Web 化检索、用户体系和运营能力。本项目借鉴工业界搜索引擎 "离线建库、在线查询" 的流水线,用 C++ 实现解析、正排 / 倒排索引、排序、HTTP 服务与用户管理,验证一个可控规模的垂直搜索系统从 0 到 1 的完整链路。
本项目由离线解析、索引构建、在线检索、Web 服务、用户与运营五大模块组成:
1. 离线解析模块:递归扫描 HTML 文档树,用状态机剥离标签、抽取标题 / 正文 / URL,按 `\3` 分隔写出结构化语料;支持多站点 URL 规则配置(sites.json)与正文区抽取、广告 DOM 惩罚。
2. 索引模块:进程内单例构建正排索引(文档 id→标题 / URL / 正文)与倒排索引(词→文档拉链),使用 cppjieba 对中英文混合文本做分词(CutForSearch),叠加停用词过滤,按 "标题词权重 ×10 + 正文词权重" 计算相关性。
3. 检索模块:对查询分词后查倒排表、按文档合并权重、降序排序,返回带命中摘要的 JSON 结果(每次最多 30 条);提供 `/suggest` 前缀搜索联想接口,前端 200ms 防抖。
4. HTTP 服务:基于 cpp-httplib 同时托管静态前端(首页、登录注册、管理后台)与 REST API(/s、/suggest、/api/register、/api/login、/api/admin/users),支持 Bearer Token 会话、未登录拦截、健康检查 `/api/health`。
5. 采集与运营:Python 爬虫(requests + BeautifulSoup,BFS + 三层过滤)持续抓取文档页;用户系统支持注册登录、角色(user/admin)、搜索日志落盘,提供 MySQL 建表脚本可迁移。
本人负责 parse→index→search→http_server 全链路设计与编码,使用 C++11 在 MinGW/Linux 双环境下用 Makefile 构建三个可执行文件。核心任务包括:①用 boost::filesystem 递归遍历 HTML 并用有限状态机剥标签;②设计正排 vector + 倒排 unordered_map 双层索引,集成 cppjieba 分词与停用词表,实现 title×10 + content 的权重公式与广告 / 竞价系数;③基于 cpp-httplib 实现 HTTP 服务与 JSON 接口,自研轻量 JSON 转义工具;④完成登录注册、Bearer Token 会话、管理端 CRUD 与搜索日志;⑤编写 Python BFS 爬虫与 sites.json 多站点配置。难点主要在跨平台路径与 POSIX 依赖裁剪、8000+ 文档启动索引加载性能、中文分词与大小写归一化、以及前端未登录门禁与 AJAX 错误兜底。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论