搜索引擎项目文档

本文档详述了一个轻量级搜索引擎项目的开发过程,涵盖了从项目需求到开发环境的设置,包括分词、网页去重、索引构建、文本相似度计算、网络编程和多进程处理等关键环节。在Linux环境下使用C++进行开发,服务器端为CentOS 6.6,前端使用PHP。项目组织结构清晰,使用配置文件管理,并涉及网络IO库和线程同步技术。搜索引擎采用预处理生成网页库、倒排索引和位置信息文件,并通过编辑距离计算文本相似度。此外,还讨论了网页去重的两种策略以及缓存机制的实现。
摘要由CSDN通过智能技术生成

一、 项目需求
开发一个轻量级搜索引擎项目,涉及分词,建索引,网页去重,计算相似度,文本聚类,前台页面展示,多进程编程,网络编程,守护进程编写,makefile编写,工程组织等各方面内容。

二、 开发环境
Linux操作系统下,C++开发
Server端:
Linux: centos6.6
G++: version 4.8
Browser端:
PHP

三、 项目目录组织

目录结构:

    src://存放系统的源文件(.cpp)
    include://存放系统的头文件(.h) 
    lib://存放系统程序中所使用的库文件
    bin://存放系统的可执行程序
    log://程序日志文件
    conf://存放系统程序中所需的相关配置信息
    data:存放系统程序所需的数据
    Makefile://Makefile文件

读数据文件,要通过配置文件来读取,不要硬编码;
程序,启动,停止,重启,扫描,都需要写脚本;

四、系统总体概述
1.预处理过程:
预处理的过程主要生成程序所需的三个文件:网页库文件,网页位置信息文件和倒排索引文件。
其中网页库文件ripepage.lib主要是以格式化的数据存储大量的网页信息,每个网页的格式化数据为:< doc >< docid >id< /docid >< docurl >url< /docurl >< doctitle >title< /doctitle >< doccontent >content< /doccontent >< >< /doc >。

网页位置信息文件offset.lib主要是存放网页在网页库中的偏移位置,以便程序能快速的取出指定的网页,该文件每一行存储一个网页文件在网页库中的位置信息,每一行的格式为:docid offset size, 其中docid为网页的id(此id具有全局唯一性),offset为文档在网页库中距离文件起始位置的字节数,size为文档的大小。
倒排索引文件invert.lib为网页库中的所有词(经过分词,去停用词)与包含这些词的文档的一种关联关系。每个词的倒排索引在该文件中占一行,每一行的格式为:
Word docid1 frequency1 weight1 … docidi frequencyi weighti…
其中word为网页库中的词, 后面接着的是每三个为一组,docidi 为包含该词的网页,frequencyi为该次在该文档中的词频,weighti为该次在该文档中的权重(归一化后的)。
2.程序运行过程:
程序首先从offset.lib中读取网页位置信息,然后根据这些信息从rippage.lib中读取网页信息,然后从invert.lib读取倒排索引信息
程序循环不断地通过socket接受来自客户端的请求,一旦受到请求就fork一个子进程负责处理该请求而主进程则继续监听。子进程接受来自客户端的查询语句,根据查询语句查找结果并将结果返回给客户端。
3.系统运行图:
这里写图片描述

五、 项目模块划分
0. 组织项目结构
1. 建立网页库
2. 分词(主要是如何使用库文件)
3. 网页去重
4. 建立索引
5. 检索模块(相似度计算)
6. 网络IO库的建立及使用

六、 项目模块需求描述
0.组织项目结构,编写基本的makefile,配置文件, 设计系统的框架
组织目录结构,编写配置文件,编写基本的makefile
配置文件名字:search.conf
Conf文件格式
< Data >
Page_file = ../data/page.lib
Stopword_file = ../data/stoplist.txt
…….
< Socket >
Port=54321

设计系统的框架,设计项目中需要的类文件
相关类及其说明:
Class MyConf
数据成员:
Map< string, string > m_map :存放配置文件内容(配置文件是以 Key – Value 的形式存储)。
Vector< pair< string, string > > m_vec : 存放词典文件的内容。(词典文件是以 word frequence 的形式存储,且文件的编码为GBK编码) 。
Map< string, set < int > > m_index : 存放包含一个字符或者汉字的词在m_vec中的位置(下标)。
Ifstream fin : 用来关联配置文件的文件流 。
主要的函数成员:
MyConf(const string& name ):带参数的构造函数,在创建该类的对象的时候一定要传递一个文件名。
Void index_to_map(int &i , map< string, set< int > > & m_map) ; 将m_vec 中第i个位置上的pair 中的 first
元素 映射到索引 m_index 。
Map< string, string >& get_map() ; 获取存放配置文件内容的关联容器 m_map 。
Class MyLock
数据成员:
Pthread_mutex_t m_mutex : 互斥信号量。
主要的函数成员:
Lock() :获得互斥量(上锁)
Unlock(): 解锁 。
Class MyCondition
数据成员:
Pthread_mutex_t& m_mutex : 互斥信号量的引用 <

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值