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得到的结果

五、总结

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

相关推荐
西北大程序猿14 分钟前
服务器代码知识点补充
服务器·开发语言·网络·c++·网络协议
yxc_inspire2 小时前
基于Qt的app开发第十四天
前端·c++·qt·app·面向对象·qss
Cai junhao3 小时前
【Qt】工具介绍和信号与槽机制
开发语言·c++·qt·qt6.3
byte轻骑兵12 小时前
【C++特殊工具与技术】优化内存分配(四):定位new表达式、类特定的new、delete表达式
开发语言·c++
广州正荣12 小时前
成绩管理革新者:C++驱动的智能数据处理平台
c++·人工智能·科技
90wunch13 小时前
对象回调初步研究
c++·windows·安全
Se_ren_di_pity13 小时前
C++ STL容器汇总
开发语言·c++
Wendy_robot13 小时前
【零基础勇闯嵌入式岗】从单片机低功耗中获得的启发
c++·单片机·嵌入式硬件
Liudef0614 小时前
2025年中国人工智能发展研究报告:技术突破、行业变革与全球竞争新格局
搜索引擎
lul~16 小时前
[科研理论]无人机底层控制算法PID、LQR、MPC解析
c++·人工智能·无人机