一个简单的搜索引擎,主要实现了Linux下的服务端与客户端,实现了两个具体功能:1.关键字推荐、2.网页搜索,使用到的第三方库:结巴(切词用)、json(数据序列化)、log4cpp(日志)、simhash(计算网页相似度)
简介:本系统属于某公司的内部使用的服务器,我和朋友利用闲暇时间又写了一个版本复刻,总体功能已经基本实现,但是可能仍有不足之处。
1.总体服务器架构使用的是 Linux下的IO多路复用 + 线程池 + C++的同步reactor服务器框架,主线程为I/O线程,处理数据的收发,子线程为工作/计算线程,处理数据的计算和复杂逻辑。
2.服务器端主要功能为两个:
关键字查询:根据生成的本地字典库文件,把相关文件导入到内存中,根据最短路径算法求出优先队列符合查询结果的5个候选词,再组包为json字符串发送过来,或者返回json空串,当用户向服务器发起查询请求后会先在Redis中检查是否已经存在对应的结果,存在立即返回,反之向内存中进一步查找,没有则返回空串。
网页查询:根据本地网页索引库文件,把索引库文件导入内存,基本逻辑同上,计算网页相似度采用simhash算法,返回前30个相关性强的网页标题、链接、摘要。
简单的流程图
首先先安装redis数据库,需要redis做缓存优化查询速度
这个安装很简单,百度即可
安装hiredis库,用以连接所需要的redis数据库
https://github.com/redis/hiredis
git clone https://github.com/redis/hiredis.git
tar -xzvf hiredis.tar.gz
cd hiredis
make
sudo make install //将可执行程序赋值到/usr/local/bin目录中,当执行程序中就不要输入完
整的路径
sudo ldconfig (更新动态库配置文件) /usr/local/lib
make test //测试redis是否编译正确
//编译时需要加上的后缀
g++ xxx.c -o xxx -I /usr/local/include/hiredis -lhiredis
或者直接g++ xxx.cc -lhiredis
安装json做数据序列化使用
https://github.com/nlohmann/json
//编译安装
mkdir build
cd build
cmake ..
make
sudo make install
安装log4cpp库,做日志的记录
这个安装比较麻烦,自行百度或者csdn,有详细安装教程
做面试用,详细信息私聊
客户端启动后如图所示:
1.关键字查询功能:
2.网页检索功能:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。