# Boost搜索引擎 **Repository Path**: zhaobohan/search-engine-online ## Basic Information - **Project Name**: Boost搜索引擎 - **Description**: 这是一个Boost搜索引擎项目,底层使用了自主实现的仿muduo库One Thread One Loop式并发服务器,基于Zookeeper提供了服务发现的微服务分布式架构 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: http://111.230.81.226:8081/ - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-03-21 - **Last Updated**: 2025-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: 项目, MySQL, Redis, Docker, zookeeper ## README # search-engine-online ### 版本迭代介绍 **search-engine-online** 是一个基于 Boost 库构建的搜索引擎项目 项目采用了多种版本,也是我不断学习和迭代的过程,未来如果学习了更多的技术,会添加更多的迭代版本 v1: 实现了最基本的功能,直接基于httplib进行了服务的搭建 v2: 主要对于底层进行升级,将httplib替换为仿照 muduo 库实现的 one-thread-one-loop 式并发服务器架构。这种架构设计旨在提供高效且易于管理的网络通信能力,以支持高性能的搜索服务,并对齐进行了http协议的封装,可以调用http的请求,相关并发服务器源码可参考: - [仿muduo库one-thread-one-loop式并发服务器](https://gitee.com/zhaobohan/concurrent-server) v3: 主要对于服务架构进行升级,基于grpc进行架构转变,将单点提供所有服务替换为微服务架构,服务与服务之间采用grpc进行通信,同时引入了Zookeeper作为服务中心,提供了服务注册和服务发现的功能,对于用户的数据密码,加入了bcrypt加密的方式,关于该加密组件我参考了: - [bcrypt加密库](https://github.com/hilch/Bcrypt.cpp) ### 项目介绍 项目名称:基于异步服务器的微服务高性能搜索引擎项目。 项目技术:C++11、STL、jsoncpp、cppjieba、Redis、MySQL、Zookeeper、gRPC、Linux、Boost网络库、Docker、bcrypt等。 开发环境:Ubuntu22.04云服务器,vscode。 项目简介: 后端采用微服务架构,由GateServer、StatusServer和SearchServer组成,各服务间以Zookeeper的微服务发现和gRPC进行通信。用户通过输入框提交搜索关键词,SearchServer进行索引查询,展示搜索结果,排序依据相关度,系统融合竞价广告模块。并利用Redis实施热词统计,动态更新热门词汇侧边栏展示。支持推荐搜索功能,输入前缀匹配当前热门关键字。StatusServer负责注册登录。 项目底层采用自研并发服务器,其中自研并发服务器借鉴muduo库设计,实行One Thread One Loop并发模型与主从Reactor模式。主Reactor负责接入新连接,分配给子Reactor处理具体请求。子Reactor运行于单独线程,利用epoll实现异步非阻塞IO,高效处理并发请求,减少锁竞争和上下文切换,确保系统高性能。 本项目已成功实现Docker容器化,通过精心设计的Docker Compose文件,实现了服务的高效编排与配置管理。 ### 项目安装 #### CentOS 安装指南 1. **克隆项目** ```bash git clone https://gitee.com/zhaobohan/search-engine-online.git ``` 2. **安装依赖** - **Boost 和 jsoncpp** ```bash sudo yum install -y boost-devel jsoncpp-devel ``` - **GCC 7 (devtoolset-7)** ```bash sudo yum install centos-release-scl scl-utils-build sudo yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ ``` - **Redis 安装** 对于 CentOS 7: ```bash yum install centos-release-scl-rh yum install rh-redis5-redis # 创建符号链接 cd /usr/bin ln -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server ln -s /opt/rh/rh-redis5/root/usr/bin/redis-sentinel ./redis-sentinel ln -s /opt/rh/rh-redis5/root/usr/bin/redis-cli ./redis-cli cd /etc/ ln -s /etc/opt/rh/rh-redis5/ ./redis ``` 对于 CentOS 8: ```bash sudo yum install -y redis ``` - **redis-plus-plus 依赖与安装** ```bash sudo yum install hiredis-devel.x86_64 git clone https://github.com/sewenew/redis-plus-plus.git cd redis-plus-plus mkdir build && cd build # 如果系统默认 cmake 版本过低,请使用 cmake3 cmake3 .. || cmake .. make sudo make install ``` **一键安装脚本(示例)** ```bash sudo yum install -y boost-devel jsoncpp-devel devtoolset-7-gcc* rh-redis5-redis hiredis-devel.x86_64 # CentOS 8 无需安装rh-redis5-redis,使用默认的redis即可 ``` #### Ubuntu 安装指南 1. **克隆项目** 同上 2. **安装依赖** - **系统更新与Boost、jsoncpp** ```bash sudo apt update sudo apt install libboost-all-dev libjsoncpp-dev ``` - **GCC 11** ```bash sudo apt install gcc-11 g++-11 ``` - **Redis 安装** ```bash sudo apt install redis-server ``` - **redis-plus-plus 依赖与安装** ```bash sudo apt install libhiredis-dev git clone https://github.com/sewenew/redis-plus-plus.git cd redis-plus-plus mkdir build && cd build cmake .. make sudo make install ``` **一键安装脚本(示例)** ```bash sudo apt update sudo apt install libboost-all-dev libjsoncpp-dev gcc-11 g++-11 redis-server libhiredis-dev ``` #### 注意事项 - 请根据实际系统版本选择对应的Redis安装命令。 - 确保在使用`devtoolset-7`或`gcc-11`编译时,通过`scl enable devtoolset-7 bash`或相应命令激活正确的GCC环境。 - redis-plus-plus的安装路径可以根据需要使用`CMAKE_INSTALL_PREFIX`自定义。 - 上述步骤未涵盖nlohmann/json库的安装,因为redis-plus-plus已内置支持,通常不需要单独安装。如果项目有特殊需求,按照指示克隆并移动头文件即可。 以上指南应帮助您顺利完成在CentOS和Ubuntu上安装search-engine-online项目及其依赖的工作。 数据库模块安装指南已整理如下: ### 安装MySQL(针对CentOS) #### 更新系统包列表 确保软件包列表是最新的,以便获取必要的更新和软件包信息: ```bash sudo yum check-update ``` #### 安装MySQL Server 使用`yum`命令安装MySQL服务器。对于CentOS 7或更高版本,建议使用MySQL 8系列,而CentOS 6可能需要特定版本的MySQL或MariaDB: ```bash sudo yum install mysql-community-server ``` 或针对特定版本(如MySQL 5.7): ```bash sudo yum install mysql-community-server-57 ``` #### 启动MySQL服务 安装后,启动MySQL服务并设置为随系统启动自动启动: ```bash sudo systemctl start mysqld sudo systemctl enable mysqld ``` #### 验证MySQL状态 检查MySQL服务是否已成功启动: ```bash sudo systemctl status mysqld ``` #### 安装MySQL开发库(CAPI) 安装MySQL客户端开发库以供程序连接数据库: ```bash sudo yum install mysql-devel ``` #### 初始化MySQL信息及数据库操作 1. **登录MySQL** 以root用户登录MySQL(首次登录可能需要重置密码): ```bash mysql -u root ``` 如需设置初始密码,可执行(仅首次): ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH PASSWORD('your_strong_password'); FLUSH PRIVILEGES; ``` 2. **创建数据库** 创建名为`boost_search`的数据库: ```sql CREATE DATABASE boost_search; ``` 3. **切换数据库** 切换到新创建的数据库: ```sql USE boost_search; ``` 4. **创建数据表** 创建`users`表用于存储用户数据: ```sql CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` 5. **创建用户** 添加数据库用户`zbh123`,并设置密码`ZBH12345678`: ```sql CREATE USER 'zbh123'@'localhost' IDENTIFIED BY 'ZBH12345678'; ``` 6. **分配权限** 授予`zbh123`在`boost_search`数据库上的SELECT和INSERT权限: ```sql GRANT SELECT, INSERT ON boost_search.users TO 'zbh123'@'localhost'; FLUSH PRIVILEGES; ``` 完成以上步骤后,MySQL已在CentOS系统上成功安装,并根据项目需求配置了数据库、用户及权限。接下来,您可利用这些配置在应用中访问MySQL数据库。 ### 安装MySQL(针对Ubuntu 20.04及以上) #### 更新系统包列表 确保您的软件包列表是最新的,这有助于获取最新的软件版本和安全更新: ```bash sudo apt update ``` #### 安装MySQL Server 使用`apt`命令安装MySQL服务器及其配套工具。安装过程中会提示设置root用户的密码: ```bash sudo apt install mysql-server ``` #### 启动MySQL服务 安装完成后,启动MySQL服务并设置为开机自启: ```bash sudo systemctl start mysql sudo systemctl enable mysql ``` #### 验证MySQL状态 检查MySQL服务是否成功启动: ```bash sudo systemctl status mysql ``` #### 安装MySQL开发库(CAPI) 安装MySQL客户端开发库,以便于编程连接MySQL数据库: ```bash sudo apt install libmysqlclient-dev ``` #### 初始化MySQL信息及数据库操作 根据项目需求,初始化数据库连接信息,并进行数据库、用户及权限设置: 1. **登录MySQL** 使用root用户登录MySQL: ```bash mysql -uroot -p ``` 2. **创建数据库** 创建名为`boost_search`的数据库: ```sql CREATE DATABASE boost_search; ``` 切换到新创建的数据库: ```sql use boost_search; ``` 3. **创建数据表** 创建`users`表,用于存储用户信息: ```sql CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); ``` 4. **创建用户** 添加数据库用户`zbh123`,并设置密码`ZBH12345678`: ```sql CREATE USER 'zbh123'@'localhost' IDENTIFIED BY 'ZBH12345678'; ``` 5. **分配权限** 授予`zbh123`用户在`boost_search`数据库上的SELECT和INSERT权限: ```sql GRANT SELECT, INSERT ON boost_search.users TO 'zbh123'@'localhost'; FLUSH PRIVILEGES; ``` 至此,您已成功安装了MySQL数据库,并根据项目需求设置了数据库连接信息、创建了数据库、表以及用户与相应的权限。接下来,您可以使用这些配置信息在应用程序中连接到MySQL数据库。 ### 使用说明 1. **编译项目**: 在完成依赖安装后,通过运行 `Makefile` 进行编译。编译完成后,将生成 `parser` 和 `httpserver` 两个可执行文件。 ```bash make ``` 2. **数据预处理**: 先运行 `parser` 程序,它会对数据进行去标签和清洗操作,并将处理后的数据保存到 `data/output/output.txt` 文件中。 ```bash ./parser ``` 3. **启动服务**: 接下来启动 `httpserver`,默认监听端口为 8081。如果启动失败,请检查防火墙设置或端口占用情况。 ```bash ./httpserver ``` ### 竞价系统与更新 - **竞价模块**: 项目中集成了一个竞价系统。在 `data` 目录下的 `Ad` 文件夹中,存放有 `Ad.txt` 文件,用于添加竞价条目。每行条目应包含标题、内容、网址及竞价价格(各元素间用空格分隔)。竞价价格直接影响条目的权重,价格越高,权重越大。 - **数据更新**: 当需要更新竞价信息时,无需重启服务端。只需单独运行 `parser` 可执行程序,它会重新处理 `data/output/output.txt` 文件中的内容,服务端将自动读取更新后的数据进行处理。 ```bash ./parser ``` ### 客户端 - **基于Qt Creator开发的客户端**: 在项目目录中存在一个快捷方式,该方式可以快速运行Qt客户端,也可以在Qt-Frame-Client中手动构建 ### 参与贡献 对项目中任何模块感兴趣的开发者,欢迎通过电子邮件与作者联系以探讨合作或提出建议: - **邮箱**:zhaobohan_free@163.com 至此,您已了解了 **search-engine-online** 项目的整体概况、安装流程、使用方法以及如何参与到项目开发中来。请根据需要遵循上述指引进行操作。