开源项目 LightSE 轻量级搜索引擎

github源码:https://github.com/Worthy-Wang/mini_search_engine


项目简介

该项目是一个用于资料查询的轻量级搜索引擎,旨在为公司的产品资料和档案提供便利的查询功能。

  • 项目架构

服务器端基于Linux 平台、C/C++语言;客户端采用PHP 实现;爬虫采用Python 实现。

  • 项目描述

该项目是一个用于资料查询的轻量级搜索引擎。实现了从爬取网页处理网页显示结果等整个搜索引擎的流程。线下部分使用tinyxml2解析爬取的网页,建立网页库,网页偏移库,使用cppjieba分词,TopK算法结合指纹信息算法判断网页重复,去重后通过TF-IDF算法建立倒排索引库。线上部分则使用MirrorLib框架搭建服务器,客户端发送查询词后,计算文本特征并建立VSM模型,并使用余弦相似度算法匹配网页,使用jsoncpp封装后发送。后续优化则使用mysql作为网页存储的数据库,redis作为Cache缓存log4cpp添加日志系统
项目展示成果如下:
开源项目 LightSE 轻量级搜索引擎_第1张图片

项目架构图

开源项目 LightSE 轻量级搜索引擎_第2张图片

项目流程

离线版本

  1. 建立网页库与网页偏移库
    技术亮点:开源库tinyxml2(DFS遍历节点), 正则表达式文件流字符串流操作, Unix目录操作单例模式(饿汉)
  2. 网页去重
    技术亮点: 开源库cppjieba分词set停词集合TopK算法(判断网页重复)
  3. 建立倒排索引
    技术亮点:unordered_map倒排哈希表TF-IDF算法(计算权重)

在线部分

  1. 搭建线程池框架
    技术亮点:基于对象线程池设计Posix线程类,互斥锁,条件变量任务队列自动加解锁类子线程安全退出机制回调函数智能指针unique_ptr
  2. 搭建服务器框架
    技术亮点:基于对象服务器设计回调函数socket网络编程IO多路复用epolleventfd(IO线程与计算线程分离)客户端安全退出机制智能指针shared_ptr
    (前两步框架可直接使用博主的开源项目 MirrorLib)
  3. 搭建搜索引擎框架
    技术亮点:文件流字符串流操作TF-IDF算法开源库log4cpp记录日志余弦相似度算法开源库jsoncpp

优化功能

  1. 使用mysql作为网页存储的数据库
  2. 使用redis作为Cache缓存

算法详解

如果对于上述算法感觉不是很理解,可以看看这一篇文章:
基于 K-means 算法实现的文本聚类(干货)

你可能感兴趣的:(开源项目)