-
博主主页:桑榆非晚ᴷ
-
博主能力有限,如果有出错的地方希望大家不吝赐教
-
给自己打气:成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑,所有的幸福都来自平凡的奋斗和坚持🥰🎉✨
(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找到文档内容
(2) 文档分词:对目标文档进行分词(目的: 方便建立倒排索引与查找)
- 文档1[雷军买了四斤小米 ]: 雷军/买/四斤/小米/四斤小米
- 文档2[雷军发布了小米手机]:雷军/发布/小米/小米手机
PS:停止词如 “了” , “从” , “吗” , “the” , “a” 等,在我们分词的时候不纳入考虑范围。
(3) 倒排索引:根据文档内容,分词,整理不重复的各个关键字,对应联系到文档ID的方案
(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/ , 查看更多