目录
[1.1 开发环境](#1.1 开发环境)
[1.2 技术栈](#1.2 技术栈)
[3.1 分词](#3.1 分词)
[3.2 正排索引(正向索引)](#3.2 正排索引(正向索引))
[3.3 倒排索引(反向索引)](#3.3 倒排索引(反向索引))
[3.4 搜索过程模拟](#3.4 搜索过程模拟)
1、搜索引擎的介绍
- 全网搜索 ,如:百度 ,360 ,搜狗 等。
- 站内搜索 ,如:CPlusPlus 。
- 本项目实现 的是Boost库的站内搜索 ,搜索的结果格式 如下:

- 搜索结果:
- 网页的标题 (title)。
- 网页内容的描述 (desc)。
- 网页的网址 (url)。
1.1 开发环境
- Ubuntu 22.04
- vscode
- g++
- Makefile
1.2 技术栈
- C/C++、C++11、STL。
- 准标准库 Boost(相关文件操作)。
- Jsoncpp(HTTP的序列化与反序列化)。
- cppjieba(关键词的切分)。
- cpp-httplib(构建HTTP服务器 ,因为本项目的重点是构建搜索引擎) 。
- 一些前端的技术 :html5、css、js、jQuery、Ajax。
2、搜索引擎的宏观原理

- 直接使用,下载好的网页资源。
3、搜索过程的简单介绍
3.1 分词
-
目的 :将文档内容 切分成 有意义的词语。
-
停止词处理 :了、的、a、the等,一般不参与索引 。为了减少索引体积 ,提高查询效率。
-
示例:
-
文档1 :路飞找到了onepiece -> [路飞 ,找到 ,onepiece]("了"作为停止词被过滤)。
-
文档2 :路飞当上了海贼王 -> [路飞 ,当上 ,海贼王]("了"作为停止词被过滤)。
-
3.2 正排索引(正向索引)
| 文档ID | 关键词集合 |
|---|---|
| 文档1 | [路飞 ,找到 ,onepiece] |
| 文档2 | [路飞 ,当上 ,海贼王] |
- 作用 :文档ID -> 关键词集合。
3.3 倒排索引(反向索引)
| 关键词(唯一) | 文档ID |
|---|---|
| 路飞 | [1,2] |
| 找到 | [1] |
| onepiece | [1] |
| 当上 | [2] |
| 海贼王 | [2] |
- 作用 :关键词(唯一) -> 所有文档。
- 排序依据 :通常还会记录权重 (如词频、位置等),用于文档排序。
3.4 搜索过程模拟
- 路飞 -> 在倒排索引中查找 -> 提取出文档[1,2] -> 根据正排索引 -> 找到关键词集合+元数据 -> 提取title+desc+url并返回。

