最新动态
【boost搜索引擎】
2024-11-06 07:52
  • 博主主页:桑榆非晚ᴷ

    【boost搜索引擎】

  • 博主能力有限,如果有出错的地方希望大家不吝赐教

  • 给自己打气:成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑,所有的幸福都来自平凡的奋斗和坚持🥰🎉✨


(1)在如今的信息时代下,市面上已经有了很多的公司有了自己的搜索引擎。比如最为知名的百度、搜狗、360搜索等搜索引擎。但是这些搜索引擎太过庞大,技术门槛太高,实现的资源成本也高,目前我们自主实现是不太可能的。我们可以自主实现一个站内搜索的搜索引擎,就比如我们经常使用的cplusplus.com网站,站内搜索的特点就是数据搜索更垂直,数据量更小。

所以我们的项目boost搜索引擎,就是用来提供对boost官方库中资源的搜索服务的。

(1)通过爬虫程序在全网中抓取相关的html网页信息,存至server服务器端的磁盘当中。

(2)对这些html文件,进行去标签化与数据清理,即只保留网页文件中的主要信息(title,content,url)。

(3)对去标签化清理后的数据,建立索引,方便我们进行后续的检索查找。

(4)客户端在浏览器中发起http请求,服务端在索引中检索到相关的html网页主要信息。

(5)拼接多个网页的(title+content+url)信息,构建出一个新html网页,返回给用户。

PS:爬虫程序,涉及法律,技术等因素限制,所以我们暂时只爬取一个boost库官方网站,且通过正规

渠道下载boost库的相关文件,我们这里使用的是boost_1_81_0版本。

  • 技术栈:
  • 项目环境
  • 文档1:雷军买了四斤小米
  • 文档2:雷军发布了小米手机

(1) 正排索引:根据文档ID找到文档内容

文档ID文档内容1雷军买了四斤小米2雷军发布了小米手机

(2) 文档分词:对目标文档进行分词(目的: 方便建立倒排索引与查找)

  • 文档1[雷军买了四斤小米 ]: 雷军/买/四斤/小米/四斤小米
  • 文档2[雷军发布了小米手机]:雷军/发布/小米/小米手机

PS:停止词如 “了” , “从” , “吗” , “the” , “a” 等,在我们分词的时候不纳入考虑范围。

(3) 倒排索引:根据文档内容,分词,整理不重复的各个关键字,对应联系到文档ID的方案

关键词(具有唯一性)文档ID,权重(weight)雷军文档1、文档2买文档1四斤文档1小米文档1、文档2四斤小米文档1发布文档2小米手机文档2

(4) 模拟一次查找的过程

用户输入 : 小米 -> 倒排索引中查找 -> 提取出文档ID{1,2} -> 根据正排索引

-> 找到文档内容 -> title+content+url 文档结果进行摘要 -> 构建响应结果

(2) Parser.cc代码框架

(3) EnumFile接口的实现:

要实现EnumFile接口,就是要在/data/input/文件夹下 , 提取每个html网页文件的路径名称。这时候就需要借助boost库中的接口来完成这一任务。

EnumFile接口实现

ParseHtml接口实现

ReadFile接口实现

ParseTitle接口实现

ParseContent接口实现

SaveHtml接口实现

把解析好的(去标签的)各个文件内容从std::vector<DocInfo_t> results以格式为title**3content3url 写入到磁盘"data/raw_html/raw.txt"**文件中。

最终Parser.cc的代码内容

(1) Index.hpp代码框架

BuildIndex接口

BuildForwardIndex接口实现

切分字符串-boost库split函数使用

举例使用 : 一个例子带你了解boost::split分词使用

可见boost::token_compress_off不会把boost::is_any_of(“字符串”)进行压缩,比如,上面按,进行分割字符串,它们三个之前会有两个空字符串也会被进行分割,分割后的空字符串push_back到std::vector< std::string>中。而boost::token_compress_on会把boost::is_any_of(“字符串”)进行压缩,压缩成一个,比如面的,就被压缩为一个,没有空字符串被push_back到std::vector< std::string >中。最后观察不带第四个参数,我们可以看到它的默认参数给的是boost::token_compress_off。

注意:编译时要指明要链接的库-lboost_system -lboost_filesystem

BuildInvertedIndex接口实现

Jieba库的安装和使用
我们进入GitHub来获取cppjieba分词工具资源(链接如下)
cppjieba下载链接

GetForwardIndex接口实现

GetInveretList接口实现

最终Index.hpp的代码内容(单例模式(懒汉模式)

(1) searcher.hpp代码框架

Jsoncpp库的引入与使用

最终searcher.hpp的代码内容

升级新版本gcc

安装cpp-httplib

使用unzip指令对压缩包进行解压

测试cpp-httplib库

http_server.cc代码框架

前端基础说明:

我们boost搜索引擎的主要代码(后端)已经完成,我们接下来简单介绍一下前端。

了解前端三大件:html , css , javascript(js

html:是网页的骨骼 — 负责网页结构

css: 网页的皮肉 — 负责网页的美观

js:网页的灵魂 — 负责动态效果,以及前后端交互

前端学习网站推荐:http://www.w3school.com.cn

编写前端代码工具选择及其安装
我们使用Vscode连接云服务器进行前端代码的编写 , 下面我们安装Vscode并进行连接。

1.进入Vscode官方网站进行下载
https://code.visualstudio.com/

示例

【1】安装好Remote - SSH之后 ,按F1打开输入对话框。

【2】输入remote-ssh

【3】ssh user_name@ip

3 Html网页结构书写

    以上就是本篇文章【【boost搜索引擎】】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/quote/6964.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多