推广 热搜: 企业  可以  page  搜索引擎  行业  百度    选择  个数  使用 

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...

   日期:2024-12-23     移动:http://ww.kub2b.com/mobile/quote/9275.html

库是中一个非常重要的开源库. 它实现了许多标准库中没有涉及的特性和功能, 一度成为了标准库的拓展库. 新标准的内容, 很大一部分脱胎于库中.

库的高质量代码 以及 提供了更多实用方便的组件, 使得库在开发中会被高频使用

为方便开发者学习使用, 库官网(boost.org)也提供了不同版本库组件的相关介绍文档, 但是Boost库的官网在相当长一段时间都是没有站内搜索的. 应该是近两个月左右才 实现了站内搜索 的功能:

但是, 库官网实现的站内搜索是全局的搜索, 很多时候大部分开发者只需要查看某个组件的文档用以学习.

此时 使用官方提供的站内搜索也是很不方便的, 而且也不支持选择版本来获取相关文档:

所以就有了本项目的出现, 为库指定版本提供文档的站内搜索

我们每个人一定都使用过搜索引擎, 一般人常用的一定有: Bing、百度、Google…

使用搜索引擎搜索一定的内容, 出现的页面一般是这样的:

其中最主要的部分是这样的:

搜索引擎通常会将搜索到的内容, 以: 网页的标题网页的简单摘要即将跳转到的网页的网址 为一个单元的形式展现出来. 并且, 包含的搜索的 关键字会被高亮显示

其他搜索引擎也是大同小异:

那么, 搜索引擎是如何做这整个过程的呢?


首先要明白, 输入关键字 点击搜索的这个行为, 其实是在创建并向服务器发送请求的行为.

在客户端输入关键词, 点击搜索. 创建请求, 携带关键词向服务器发送请求.

服务器接收到请求之后, 根据关键词 在服务器检索索引 获取所有相关的的内容, 然后 将获取到的多个网页内容, 拼接构建成一个新的网页 响应回客户端.

整个过程中最重要的过程在于:

关于索引, 实际是一个帮助快速查找数据的数据结构. 根据关键词 检索索引, 就是在数据结构中查找关键词相关的数据.

索引, 是在 搜索引擎服务启动之前 服务器提前建立好的. 搜索引擎服务启动之后, 可以直接通过索引来检索数据.

搜索引擎索引的建立步骤一般是这样的:

  1. 爬虫程序爬取网络上的内容, 获取网页等数据
  2. 对爬取的内容进行解析、去标签, 提取文本、链接、媒体内容等信息
  3. 对提取的文本进行分词、处理, 得到词条
  4. 根据词条生成索引, 包括正排索引、倒排索引等

建立好索引之后, 搜索引擎服务就可以根据关键词 检索索引 获取相关数据.

这一整个流程, 即为 搜索引擎的相关宏观原理

大致的流程 以及 宏观原理图, 可以根据这一张图来理解

服务端需要做的第一个工作是爬取网页.

但是本项目中不需要, 因为是站内文档搜索, 官方提供的也有库的相关源码文件, 其中就包括了库的文档文件.

https://boostorg.jfrog.io/artifactory/main/release/

这是库的源码发布页. 我们可以直接找到指定版本获取下载链接, 将文件下载到服务器中:

 

获取到源码压缩文件之后, 执行解压

然后就获取了库源码:

其中, 所有的文档文件都在 目录下:

统计了一下, 此目录下(包括子目录) 一共有个文件, 这些都是库提供的文档

技术栈:

  1. 后端:
  2. 前端:

项目环境:

实现一个搜索引擎, 最重要的地方在于

建立索引, 就是建立 文档与关键词之间的的映射

所以在建立索引之前, 要 先清理文档中对搜索无用的无效数据. 在文件中, 无效数据就是的各种标签:

 
 

标签中, 和之间的内容都是对搜索来说无效的内容. 而对于成对的标签来说 和之间的内容则是有效的内容.

简单点来说, 标签内部的数据 是对搜索无效的数据, 标签外的数据是对搜索有效的数据.

简单的举例子:

 

其中有效的数据是: 和

其他的都属于标签内的数据, 都是对搜索无效的, 因为浏览器不会将标签内的数据值渲染出来, 那是一些属性.

清理完文档中对搜索无用的无效数据之后, 就可以对文档的内容 进行分词.

分词, 就是将一句话中可用作关键字的词语分割开, 比如:

  1. 博主买了一些小米和南瓜

    分词就可能会分为:

  2. 博主做了小米南瓜粥吗

    分词就可能会分为:

将可用作关键词的词汇组合或分开并汇总, 停止词不考虑, 就是分词.

停止词, 就是搜索中没有明显作用的词:

每个文件都有文件名 也就是文件ID, 文件内容包含了关键词. 将文件名和关键词之间建立映射关系, 就是建立索引.

以下以两个文件为例

  1. 文件1: 博主买了一些小米和南瓜

  2. 文件2: 博主做了小米南瓜粥吗

正排索引

正排索引, 是 从文件ID找到文件关键词:

文件ID内容关键词文件1 文件2

可以看作, 文件ID是Key 用于查找, 内容关键词是Value 是被找到的内容. 建立正排索引可以不对文件内容做分词

此项目中, 建立正派索引时不对文件内容做分词处理

倒排索引

与正排索引相反.

倒排索引, 是 从文件关键词找到文件ID. 并且, 会将所有文档中的关键词进行汇总去重:

关键词(唯一)涉及的文件ID(文件权重)文件1、文件2文件1文件1文件1、文件2文件1、文件2文件1文件2文件2文件2

可以看作, 关键词是Key 用于查找, 文件ID是Value 是被找到的内容.


项目中, 正排索引和倒排索引都需要建立并使用.

模拟整个查找到检索索引再到响应的流程:

输入关键词 --> “博主” --> 先在倒排索引检索 --> 获取"文件1""文件2"文件ID --> 再根据获取的文件ID在正排索引中检索 --> 检索到相关文件的文件内容 --> 根据内容构建新网页 --> 响应新网页


本片文章介绍了项目背景, 从下一篇文章开始开始编写项目代码

本文地址:http://ww.kub2b.com/quote/9275.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号