搜索引擎的介绍及相关原理

目录

1、搜索引擎的介绍

[1.1 开发环境](#1.1 开发环境)

[1.2 技术栈](#1.2 技术栈)

2、搜索引擎的宏观原理

3、搜索过程的简单介绍

[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++11STL
  • 准标准库 Boost(相关文件操作)。
  • Jsoncpp(HTTP的序列化与反序列化)。
  • cppjieba(关键词的切分)。
  • cpp-httplib(构建HTTP服务器 ,因为本项目的重点是构建搜索引擎) 。
  • 一些前端的技术html5cssjsjQueryAjax

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并返回