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

目录

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