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

相关推荐
一叶知秋yyds1 天前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
史迪仔01121 天前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AI_Claude_code1 天前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx
会编程的土豆1 天前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
低频电磁之道1 天前
解决 Windows C++ DLL 导出类不可见的编译错误
c++·windows
楠奕1 天前
CentOS7安装GoldenDB单机搭建及常见报错解决方案
linux·运维·服务器
剑锋所指,所向披靡!1 天前
Linux常用指令(2)
linux·运维·服务器
不愿透露姓名的大鹏1 天前
Oracle归档日志爆满急救指南
linux·数据库·oracle·dba
W.W.H.1 天前
嵌入式常见的面试题1
linux·网络·经验分享·网络协议·tcp/ip
木白CPP1 天前
DMA-Buffer内核驱动API文档
linux