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

相关推荐
buyue__16 小时前
C++实现数据结构——队列
数据结构·c++
Hui Baby16 小时前
LSM 原理、实现及与 B+ 树的核心区别
java·linux·算法
NZT-4816 小时前
C++基础笔记(二)队列deque,queue和堆priority_queue
java·c++·笔记
德迅云安全—珍珍16 小时前
主机安全-德迅卫士
linux·服务器·安全
云动课堂16 小时前
一键升级 OpenSSH 10到最新版:告别手工编译、兼容国产系统、批量部署无忧!
linux·服务器·centos
一分半心动16 小时前
lnmp架构 mysql数据库Cannot assign requested address报错解决
linux·mysql·php
玉树临风ives16 小时前
atcoder ABC436 题解
c++·算法·leetcode·atcoder·信息学奥赛
fpcc16 小时前
C++23中的自定义模块开发
c++·c++23
每日学点SEO16 小时前
「网站新页面冲进前10名成功率下降69%」:2025 年SEO竞争格局分析
大数据·数据库·人工智能·搜索引擎·chatgpt
ChristXlx16 小时前
Linux安装mysql(虚拟机适用)
linux·mysql