BoostCompass —— 搜索引擎

文章目录

  • 一、项目简介
  • 二、Boost库简介
    • [1. 简介](#1. 简介)
    • [2. Boost 库的特点](#2. Boost 库的特点)
  • 三、项目主要模块
    • [1. 网页内容获取,数据预处理模块](#1. 网页内容获取,数据预处理模块)
    • [2. 建立正排索引和倒排索引,项目核心模块](#2. 建立正排索引和倒排索引,项目核心模块)
    • [3. 编写 http_server 模块,进行网络开放](#3. 编写 http_server 模块,进行网络开放)
  • 四、项目功能预览
    • [1. 项目文件预览](#1. 项目文件预览)
    • [2. 项目执行步骤](#2. 项目执行步骤)
  • 五、总结

一、项目简介

BoostCompass 是一款基于 Boost 文档的站内搜索引擎。用户只需输入查询关键词,即可快速检索到相关的 Boost 在线文档,并提供相关网页链接,为用户提供了便捷的检索服务。

首先,我们对离线版本的 HTML 文档进行解析,并将解析结果整理为一个行文本文件。然后,读取并处理好的文本文件,进行分词、权重计算等操作,同时在内存中构建正排索引和倒排索引。接下来,对用户查询词进行分词和触发,根据相关度对结果进行排序。最后,将结果以 JSON 格式进行包装,并序列化为字符串返回。所有这些功能通过 HTTP 服务器搭载搜索页面,为外部用户提供服务。

二、Boost库简介

🔴 Boost官网链接

1. 简介

Boost 是一个由C++社区开发和维护的开源库集合,它提供了许多功能强大且高质量的 C++ 库,可以扩展 C++ 标准库的功能。Boost 库包含了许多与 C++ 标准库相似的组件,同时还提供了一些独特的功能和工具,比如 Boost.Asio 用于网络编程、Boost.Thread 用于线程操作、Boost.Filesystem 用于文件系统操作等等。

Boost 库的目标是通过提供高质量、可移植、且兼容标准的 C++ 库来增强 C++ 的功能和性能。它的发展历史可以追溯到 1998 年,是一个长期积累和发展的项目。由于 Boost 的质量和广泛使用,很多 Boost 库最终被纳入了 C++ 标准库,比如智能指针、函数对象、元编程库等。

2. Boost 库的特点

  1. 高质量:Boost 库经过严格的测试和审核,确保了高质量的代码和可靠的功能。

  2. 可移植性:Boost 库可以在各种平台上使用,包括 Windows、Linux、Mac 等,为 C++ 程序的跨平台开发提供了便利。

  3. 兼容性:Boost 库与 C++ 标准库兼容,并且遵循 C++ 的最佳实践,可以与现有的 C++ 代码很好地集成和使用。

  4. 功能丰富:Boost 库涵盖了很多领域,包括但不限于网络编程、多线程、文件系统、智能指针、正则表达式、容器和算法等,为 C++ 开发者提供了丰富的工具和组件。

总的来说,Boost 库是 C++ 社区中非常重要的一个开源项目,为 C++ 程序员提供了丰富的工具和功能,有助于提高代码的质量、可移植性和性能。

三、项目主要模块

1. 网页内容获取,数据预处理模块

这个模块代码的主要思路是从指定目录中枚举所有HTML文件,解析出每个文件的标题、内容和URL,并将这些信息以特定的格式保存到一个文本文件中。我们首先使用boost::filesystem库递归遍历目录,收集所有HTML文件的路径,然后逐个读取文件内容,通过自定义的解析函数提取所需信息。解析出的文档数据随后被写入到一个输出文件中,使用特定分隔符来区分不同文档的记录。我们在执行过程中进行了详尽的错误检查和处理,确保了其健壮性。

2. 建立正排索引和倒排索引,项目核心模块

这个模块我们定义了一个名为Index的C++类,用于构建和维护一个文档索引系统。该系统采用单例模式确保只有一个索引实例,并使用正排索引和倒排索引来快速检索文档。正排索引存储了文档的基本信息,如标题、内容和URL,而倒排索引则根据关键词将文档分组。类中提供了构建索引、获取文档信息和获取倒排列表的方法。构建索引的过程涉及读取处理过的数据文件,解析文档数据,并根据文档内容构建索引。此外,我们还实现了简单的进度显示功能。整个索引系统的构建旨在提高文档检索的效率和准确性。

3. 编写 http_server 模块,进行网络开放

这个模块是一个基于C++的简单搜索引擎服务程序,我们整合了HTTP服务器和搜索功能。我们首先初始化一个搜索器对象,使用预先处理好的文档数据(来自第一个模块)来建立索引。然后,我们设置了一个HTTP服务器,并为服务器定义了一个GET请求的处理函数,该函数响应客户端对"/s"路径的访问。

当客户端发送包含搜索关键字的请求时,服务器会验证请求中是否包含关键字参数。如果没有关键字,服务器会返回错误信息。如果有关键字,服务器将调用搜索器的搜索方法,传入关键字,并获取搜索结果,这些结果被封装为JSON字符串返回给客户端。

服务器在启动时会记录一条日志信息,指示服务器已成功启动,并开始监听所有IP地址的8081端口上的请求。

四、项目功能预览

1. 项目文件预览

上面的图片包含了最后所用到的文件,这些文件包含了最后所使用的文档和资源,想要具体了解的可以点击后面的传送门:🔴 项目代码URL传送

2. 项目执行步骤

  1. 在控制台输入make命令,会生成三个可执行文件parserdebughttp_server如下图所示
  2. 运行parser文件,在控制台输入./parser命令
  3. 运行http_server文件,在控制台输入./http_server命令,效果如下图所示

⭕执行时间大概六分钟左右进度会到达100%

  1. 打开任意浏览器, 在网址搜索栏搜索URL:[主机IP]:8081 如下图所示

  2. 在搜索框里面搜索Boost库内的关键词,如下图我们搜索Boost organization得到的结果

五、总结

目前我们仅进行了基础的介绍,涵盖了一些基本的使用方法。接下来,我将逐步更新更详细的内容,包括代码解释和更深入的功能介绍。敬请期待!

相关推荐
ziguo11222 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio
白色冰激凌3 小时前
[SECS/GEM研究] (三)SECS-I 串口上消息怎么分块和重传
c++·secs/gem
光头闪亮亮3 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮3 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
_wyt0013 小时前
洛谷 P7912 [CSP-J 2021] 小熊的果篮 题解
c++·队列
choumin4 小时前
创建型模式——原型模式
c++·设计模式·原型模式·创建型模式
code_pgf5 小时前
C/C++ 常用容器功能汇总
c语言·开发语言·c++
王维同学6 小时前
Credential Provider、Filter 与 PLAP 的 CLSID 枚举
c++·windows·安全·注册表
小保CPP6 小时前
OpenCV C++基于模糊数学的图像修复
c++·人工智能·opencv·计算机视觉
Carlgood-Minecraft7 小时前
随机分位系统破解版 (BPS)Version-B4.2
c++