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

相关推荐
zzzzzz3104 小时前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode4 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
clint4563 天前
C++进阶(1)——前景提要
c++
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
夜悊3 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴3 天前
CMake 021: IF 条件判据详诠
c++·cmake