LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(1——项目框架)

基于正倒排索引的boost搜索引擎

  • 项目架构
    • 一、项目结构与技术栈
    • 二、开发流程概述
      • [1. 数据准备与解析(Parser模块)](#1. 数据准备与解析(Parser模块))
      • [2. 索引构建(Index模块)](#2. 索引构建(Index模块))
      • [4. HTTP服务模块(Server模块)](#4. HTTP服务模块(Server模块))
      • [5. 前端界面(Frontend模块)](#5. 前端界面(Frontend模块))

项目架构

一、项目结构与技术栈

技术栈:C++11、STL、Boost、Jsoncpp、cppjieba、cpp-httplib

前端:HTML5 + CSS + JavaScript + jQuery + Ajax

环境:CentOS 7(或其他)、gcc/g++、Makefile、VS Code/VS2019

二、开发流程概述

1. 数据准备与解析(Parser模块)

输入 :Boost官网HTML文档(比如boost_1_78_0/doc/html/*.html)

下载之后可以用lrzsz命令发送到云服务,用tar解压,然后把里面的html文件夹复制出来,获取数据。


输出:去标签后的干净文本,格式为:title\3content\3url\n

以\3为分隔符分割属性,以\n分割不用的html文档。标题,内容,原官网文档链接。

步骤:

  • 递归遍历HTML文件目录

  • 提取每个文件的标题(title)、内容(去标签)、URL(拼接官网路径)

  • 保存为结构化文本文件(比如raw.txt)

ps:下载boost准标准库 sudo apt install libboost-all-dev

2. 索引构建(Index模块)

a. 正排索引(Forward Index)

结构:vector

每个文档包含:doc_id, title, content, url

功能:通过doc_id快速获取文档内容

b. 倒排索引(Inverted Index)

结构:unordered_map<string, vector<InvertedElem>>

InvertedElem包含:doc_id, word, weight

功能:通过关键词快速获取包含该词的文档列表

c. 索引构建流程:

读取raw.txt,逐行解析

对每个文档的title和content进行分词(使用cppjieba)

统计词频,计算权重(如:标题中出现的词权重更高)

构建正排和倒排索引

3. 搜索引擎模块(Searcher模块)

初始化:加载索引文件

搜索流程:

对用户查询词进行分词

根据每个词在倒排索引中查找文档ID列表

合并结果,按权重排序

生成摘要(从正文中提取包含关键词的片段)

返回JSON格式结果(使用Jsoncpp)

4. HTTP服务模块(Server模块)

使用cpp-httplib搭建HTTP服务器

提供两个接口:

GET /:返回前端页面

GET /s?word=xxx:处理搜索请求,返回JSON结果

部署在CentOS上,监听指定端口(如8081)

5. 前端界面(Frontend模块)

HTML结构:搜索框 + 结果列表

CSS样式:美化页面,响应式布局

JavaScript/jQuery:处理用户输入、发起Ajax请求、动态渲染结果

与后端通过JSON交互,支持点击跳转至原文档URL

相关推荐
星恒随风7 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
唐墨12312 小时前
linux kernel 比较数据大小的宏定义
linux·算法
程序开发阿元12 小时前
密码不进工具:一个独立开发者的服务器凭据管理办法
linux·ssh
AR-26710-15 小时前
Linux Day33——定时任务+lvm
linux·运维
墨痕诉清风16 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
byte轻骑兵16 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙
老歌老听老掉牙17 小时前
案例 7:二维 Rosenbrock 函数最小值(香蕉函数)
c++·pso
瓦瓦gogo17 小时前
从一个 TypeScript 函数开始理解 MCP 协议
linux·ubuntu·typescript
Severus_black17 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
鱼听禅18 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu