# 站内文档搜索引擎 **Repository Path**: andy0523/in-site-document-search-engine ## Basic Information - **Project Name**: 站内文档搜索引擎 - **Description**: 基于boost库文档的搜索引擎 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-06 - **Last Updated**: 2026-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Boost 文档站内搜索引擎 一个使用 C++ 实现的轻量级站内文档搜索引擎。项目以 Boost HTML 文档为数据源,完成 HTML 内容解析、正排/倒排索引构建、关键词检索和 HTTP JSON 接口输出。 ## 功能特性 - 递归扫描并解析本地 HTML 文档 - 提取文档标题、正文和原始链接 - 使用 cppjieba 对中英文内容进行搜索模式分词 - 构建正排索引与倒排索引 - 按标题和正文中的词频计算相关性权重 - 返回标题、摘要和链接组成的 JSON 搜索结果 - 提供命令行调试程序和 HTTP 搜索服务 ## 工作流程 ```text Boost HTML 文档 | v parser.cc 解析、清洗 | v data/raw_html/raw.txt | v 构建正排索引和倒排索引 | v 关键词检索、相关性排序 | v 命令行结果或 HTTP JSON 响应 ``` ## 项目结构 ```text . ├── parser.cc # HTML 文档解析器 ├── index.hpp # 正排索引和倒排索引 ├── searcher.hpp # 分词、检索、排序及 JSON 序列化 ├── util.hpp # 文件、字符串和分词工具 ├── debug.cc # 命令行搜索测试程序 ├── http_server.cc # HTTP 搜索服务 ├── cpp-httplib/ # cpp-httplib 头文件(需自行准备) ├── cppjieba/ # cppjieba 头文件(需自行准备) ├── dict/ # cppjieba 词典文件(需自行准备) ├── data/ │ ├── input/ # 待解析的 Boost HTML 文档 │ └── raw_html/ # 解析结果输出目录 └── wwwroot/ # 可选的前端静态页面 ``` > 当前仓库中的源码不包含第三方头文件、词典、Boost HTML 原始文档和前端静态资源。运行项目前,需要按上面的目录结构补充相关文件。 ## 环境依赖 推荐在 Linux 环境下使用 GCC 7 或更高版本编译。 - C++11 或更高版本 - Boost.Filesystem - JsonCpp - [cppjieba](https://github.com/yanyiwu/cppjieba) - [cpp-httplib](https://github.com/yhirose/cpp-httplib) 以 Ubuntu/Debian 为例,安装系统依赖: ```bash sudo apt update sudo apt install -y g++ libboost-filesystem-dev libjsoncpp-dev ``` 将 cppjieba 源码中的 `include/cppjieba` 目录复制到项目根目录,并将其 `dict` 目录复制到项目根目录;再创建 `cpp-httplib` 目录并将 `httplib.h` 放入其中。 ## 准备数据 1. 下载 Boost HTML 文档。 2. 将文档内容放入 `data/input/`。 3. 创建解析结果目录: ```bash mkdir -p data/raw_html ``` `parser.cc` 当前生成的结果链接基于 Boost 1.90.0 文档地址。如果使用其他版本,请修改 `parser.cc` 中的 `url_head`。 ## 编译 在项目根目录执行: ```bash # 编译文档解析器 g++ parser.cc -o parser -std=c++11 -lboost_filesystem -lboost_system # 编译命令行调试程序 g++ debug.cc -o debug -std=c++11 -ljsoncpp -pthread # 编译 HTTP 服务 g++ http_server.cc -o http_server -std=c++11 -ljsoncpp -pthread ``` 如果系统无法找到 JsonCpp 头文件,可额外添加头文件路径,例如 `-I/usr/include/jsoncpp`。 ## 运行 ### 1. 解析 HTML 文档 ```bash ./parser ``` 程序会扫描 `data/input/` 下的所有 `.html` 文件,并将结果写入 `data/raw_html/raw.txt`。每行依次保存标题、正文和 URL,字段之间使用 ASCII 控制字符 `\3` 分隔。 ### 2. 命令行搜索 ```bash ./debug ``` 输入关键词后,程序会输出 JSON 格式的搜索结果。 ### 3. 启动 HTTP 服务 ```bash ./http_server ``` 服务默认监听 `0.0.0.0:8081`,并以 `wwwroot/` 作为静态资源目录。 搜索接口: ```http GET /s?word=关键词 ``` 调用示例: ```bash curl --get --data-urlencode "word=filesystem" http://127.0.0.1:8081/s ``` 响应示例: ```json [ { "title": "Boost Filesystem", "desc": "...filesystem...", "url": "https://www.boost.org/doc/libs/1_90_0/doc/html/..." } ] ``` ## 检索原理 1. 文档解析器去除 HTML 标签,并提取标题、正文和 URL。 2. 索引模块为每篇文档分配唯一 `doc_id`,构建正排索引。 3. cppjieba 分别对标题和正文分词,构建关键词到文档的倒排索引。 4. 相关性权重按 `标题词频 × 10 + 正文词频 × 1` 计算。 5. 查询时合并各关键词命中的文档,累加权重并降序排列。 6. 服务截取关键词附近的正文作为摘要,最终输出 JSON。 ## 注意事项 - 所有相对路径均以项目根目录为基准,请在项目根目录运行程序。 - 首次启动搜索程序时会在内存中构建索引,数据量较大时需要等待。 - 当前索引仅保存在内存中,程序退出后不会持久化。 - 当前 HTML 正文提取采用简单的状态机,适合文档型静态页面,不是完整的 HTML 解析器。 - 本项目用于学习和演示,部署到公网前建议补充参数校验、异常处理、日志和访问控制。 ## License 本项目暂未指定开源许可证。如需公开复用或接受外部贡献,建议补充合适的 `LICENSE` 文件。