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

这篇具有很好参考价值的文章主要介绍了[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目


项目背景

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

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

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

搜索引擎相关宏观原理

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

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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


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

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

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

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

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

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

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

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

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

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

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

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

Boost库源码下载

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

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

wget https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/boost_1_82_0.tar.gz

获取到源码压缩文件之后, 执行tar -zxvf boost_1_82_0.tar.gz解压

然后就获取了Boost库源码:

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

Boost库站内文档搜索 所需技术栈 以及 项目环境

技术栈:

  1. 后端: C/C++ C++11 STL Boost库 Jsoncpp cppjieba cpp-httplib
  2. 前端: html css js jQuery Ajax

项目环境:

  1. Centos 7云服务器 neovim gcc(g++) makefile

清理 分词 和 索引

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

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

清理文档文件

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

<!-- 各种成对的标签 -->
<html></html>
<head></head>
<body></body>
<div></div>
<!-- 各种单独的标签 -->
<link>
<meta>
<img>

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...,C++项目实战-Boost库文档站内搜索,c++,搜索引擎,服务器,Boost,项目

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

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

简单的举例子:

<div><p class="copyright">Copyright © 2005, 2006 Eric Niebler</p></div>
<div class="toc">
<p><b>Table of Contents</b></p>

其中有效的数据是: Copyright © 2005, 2006 Eric NieblerTable of Contents

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

分词

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

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

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

    分词就可能会分为: 博主 一些 小米 南瓜 小米和南瓜

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

    分词就可能会分为: 博主 小米 南瓜 南瓜粥 小米南瓜粥

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

停止词, 就是搜索中没有明显作用的词: 了 的 吗 呢 a the ...

索引

每个文件都有文件名 也就是文件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在正排索引中检索 --> 检索到相关文件的文件内容(title、content、url) --> 根据内容构建新网页 --> 响应新网页


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

感谢阅读~文章来源地址https://www.toymoban.com/news/detail-622394.html

到了这里,关于[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Boost搜索引擎项目

    目录 1.项目相关背景 2.搜索引擎的相关宏观原理 3.搜索引擎技术栈和项目环境 4.正排索引 倒排索引--搜索引擎原理 5.编写数据去标签与数据清洗的模块 -- parser.hpp 去标签 编写parser(将文件去标签) 编写EnumFile函数 编写ParseFile函数 解析三大部分: 编写SaveFile函数 6.建立索引--编写

    2024年02月01日
    浏览(80)
  • 【项目】Boost搜索引擎

    研发搜索引擎的公司,如百度、搜狗、360搜索,还有各大网站各种客户端也提供搜索功能 为什么选择实现Boost搜索引擎 1)因为Boost官方网站是没有搜索功能的,所以我们可以为Boost实现一个站内搜索引擎,虽然官方提供了boost相关的一些方法,标准库中的一些接口,但是我们想看到

    2024年02月03日
    浏览(49)
  • 【Boost搜索引擎项目】

    1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title3content3urlntitle3content3urln格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作,在内存中构造出正排索引和倒排索引。 3.编写搜索引擎模块–searcher.hpp 对查询词进

    2024年02月15日
    浏览(58)
  • 【C++项目】boost搜索引擎

    boost官网 Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。 Boost库由Boost社区组织开发、维护。其目的是为C++程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。Boost库使用Boost License来授权使用,根据该协议

    2023年04月16日
    浏览(90)
  • 基于boost库的搜索引擎项目

    boost库是指一些为C++标准库提供扩展的程序库总称,但是boost网站中并没有为我们提供站内搜索功能,因此我们要想找到某一个类的用法还要一个个去找,因此我们这次的目的就是实现一个搜索引擎功能,提高我们获取知识的效率 比如百度,谷歌,360等,这些都是大型的搜索

    2024年03月14日
    浏览(82)
  • 基于boost准标准库的搜索引擎项目

    这是一个基于Web的搜索服务架构 客户端-服务器模型 :采用了经典的客户端-服务器模型,用户通过客户端与服务器交互,有助于集中管理和分散计算。 简单的用户界面 :客户端似乎很简洁,用户通过简单的HTTP请求与服务端交互,易于用户操作。 搜索引擎功能 :服务器端的

    2024年04月27日
    浏览(35)
  • 【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建

    🌈欢迎来到C++项目专栏 🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C++、Linux系统编程、计算机网络、数据结构、Mysql、Python 🍇 博客介绍:通过分享学习过程,加深知识点的掌握,也希望通过平台能

    2024年03月23日
    浏览(42)
  • 站内搜索引擎

    1.什么是搜索引擎? 如图所示: 我用的是谷歌浏览器,但是我的搜索引擎可以跟换 。切换到bing主页 在搜索框中我们输入一段话,跳到一个带有搜索结果的页面如下: 搜索引擎的核心功能:查找用户输入的词/一句话 相关联的网页。  搜索结果页一条记录包含的信息如下:

    2023年04月11日
    浏览(42)
  • 什么是站内搜索引擎?如何在网站中加入站内搜索功能?

    在当今数字时代,用户体验对于网站的成功起着至关重要的作用。提升用户体验和改善整体网站性能的一种方法是引入站内搜索引擎。站内搜索引擎是一种强大的工具,它的功能类似于Google或Bing等流行搜索引擎,但它专注于实施自己网站上的内容。用户可以在网站内搜索特定

    2024年02月03日
    浏览(75)
  • Java项目——文档搜索引擎

    实现一个较为简单的搜索引擎,在拥有较多网页的基础上,在用户输入查询词之后,能够从这些网页中尽可能地匹配出用户想要的网页 当然,不同于百度搜狗这种搜索引擎,它们能够对互联网中大量的网站都进行搜索,我们这里实现的是针对「Java 文档」的搜索引擎,就像下

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包