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

相关推荐
Coding_Doggy4 分钟前
服务器迁移 | psql大批量数据以及navicat重新连接、conda 环境迁移
linux·数据库·人工智能
欧阳x天6 分钟前
STL讲解(七)——list容器的模拟实现
c++·windows·list
枫叶丹49 分钟前
【Qt开发】Qt系统(十一)-> Qt 音频
c语言·开发语言·c++·qt·音视频
j_xxx404_9 分钟前
Linux:进程控制(创建/终止/等待/获取退出信息/多进程)
linux·运维·服务器
yuluo_YX11 分钟前
Alias for Linux/Mac
linux·elasticsearch·macos
TracyCoder12312 分钟前
ElasticSearch内存管理与操作系统(三):并发控制与线程模型
大数据·elasticsearch·搜索引擎
散峰而望15 分钟前
【基础算法】穷举的艺术:在可能性森林中寻找答案
开发语言·数据结构·c++·算法·随机森林·github·动态规划
那年我七岁17 分钟前
android ndk c++ 绘制图片方式
android·c++·python
散峰而望17 分钟前
【基础算法】算法的“预谋”:前缀和如何改变游戏规则
开发语言·数据结构·c++·算法·github·动态规划·推荐算法
仰泳的熊猫20 分钟前
题目1432:蓝桥杯2013年第四届真题-剪格子
数据结构·c++·算法·蓝桥杯·深度优先·图论