经过两星期紧张的开发,我的开源搜索引擎xyzse第一版总算发布了
。可以通过以下链接下载源代码,
sourceforge站点: http://sourceforge.net/projects/xyzse/
google code站点: http://code.google.com/p/xyzse/
xyzse第一版编写的目的是写一个非常小的中文搜索引擎,但是麻雀虽小,五脏俱全,确切是说是一个原型演示版。借此可以学习一下搜索引擎的基本原理,积累相关经验。今后的版本会进一步完善功能,并且可能在此基础上实现一些新的想法和算法。
本来初期计划由我,sinofish同学和lzz同学一起完成,周期为一个月。不过我后来发现编写一个Tiny搜索引擎并没有想象中那么困难,并且另外两位同学平时比较忙(我也忙啊
),因此第一版就全部交给我完成了。下面摘录的是中文doc文档
下面是首页截图
下一版本将要:
(1)加入网页排序功能,和动态网页内容摘要功能
(2)支持实现多个关键词查询功能
(3)加入爬虫的IP限制功能

sourceforge站点: http://sourceforge.net/projects/xyzse/
google code站点: http://code.google.com/p/xyzse/
xyzse第一版编写的目的是写一个非常小的中文搜索引擎,但是麻雀虽小,五脏俱全,确切是说是一个原型演示版。借此可以学习一下搜索引擎的基本原理,积累相关经验。今后的版本会进一步完善功能,并且可能在此基础上实现一些新的想法和算法。
本来初期计划由我,sinofish同学和lzz同学一起完成,周期为一个月。不过我后来发现编写一个Tiny搜索引擎并没有想象中那么困难,并且另外两位同学平时比较忙(我也忙啊

***********************************************************************
Xyzse document 0.7 . 0
author: zouxin
data: 2008 / 3 / 26
***********************************************************************
******************
1 . 概述
xyzse是一个 Tiny Search Engine 或者 Toy Search Engine, 它实现了一个搜索引擎所具有的基本功能。它能够通过爬取网页,分词并建立正排和倒排索引,并且提供一个简单的用户查询接口,带有网页快照。 xyzse完全由C ++ 编写而成,运行于Linux操作系统下,可以用于搜索引擎爱好者学习搜索引擎的基本实现原理。
******************
2 . 各模块简介
xyzse分为三个相互独立的基本模块,分别是爬虫模块(Crawler module), 索引模块(index module), 用户查询模块(query module)。其中,
( 1 )爬虫模块:
该模块负责爬取网页,并存为本地原始文件。爬虫从种子文件中读取URL后,启动多个爬虫线程,将待爬取URL放入多个优先级队列中。每个线程不断轮询各个优先级队列,从中取出URL进行爬取并存为本地文件。为了防止重复爬取,需要将已爬取的URL和不可访问站点的MD5值保存在内存中。通过建立DNS缓存以减轻DNS服务器负担。爬虫采用了非阻塞连接和下载方式并设定超时,以提高爬虫下载速度。爬虫管理员可以通过访问http: //localhost:8080 来查 看爬虫运行情况。
在我的PC机(Ubuntu7. 04 ,双核CPU,2G内存,NAT局域网100M带宽)上短时间测试,设定150个爬虫线程,7分钟可以爬取25240个网页,下载1.4G数据量。注意这是在爬虫刚开始运行的较理想情况下,由于DNS的瓶颈限制以及爬行策略的设置可能会使速度远远低于这个数字。
( 2 )索引模块:分为正排索引和倒排索引两个子程序。其中正排索引程序从爬虫下载的网页文件中建立文档编号与文档偏移的索引文件(doc.index),然后对原始文档分词,建立正排索引(forward.index)。倒排索引程序读入正排索引,建立关键字到文档号的倒排索引,为了对网页进行排序,还要记录关键词在每个文档的出现次数。具体格式可以参考indexdesign.pdf文件。
( 3 )用户查询模块:
主要包括两个部分,分别是CGI程序和后台服务程序。后台服务程序在后台运行,启动时候读入索引文件。CGI程序由http服务器调用,用户每提交一次查询,CGI程序就会被调用一次。两个进程通过命名管道(FIFO)进行通信,CGI提交查询,后台服务程序查询并返回结果,CGI读入结果并输出。
******************
3 . 说明
由于时间和精力有限,xyzse第一版的开发周期非常短,因此很多地方不够完善。我们会在今后版本里不断对代码进行完善,并加入新的功能。
Xyzse document 0.7 . 0
author: zouxin
data: 2008 / 3 / 26
***********************************************************************
******************
1 . 概述
xyzse是一个 Tiny Search Engine 或者 Toy Search Engine, 它实现了一个搜索引擎所具有的基本功能。它能够通过爬取网页,分词并建立正排和倒排索引,并且提供一个简单的用户查询接口,带有网页快照。 xyzse完全由C ++ 编写而成,运行于Linux操作系统下,可以用于搜索引擎爱好者学习搜索引擎的基本实现原理。
******************
2 . 各模块简介
xyzse分为三个相互独立的基本模块,分别是爬虫模块(Crawler module), 索引模块(index module), 用户查询模块(query module)。其中,
( 1 )爬虫模块:
该模块负责爬取网页,并存为本地原始文件。爬虫从种子文件中读取URL后,启动多个爬虫线程,将待爬取URL放入多个优先级队列中。每个线程不断轮询各个优先级队列,从中取出URL进行爬取并存为本地文件。为了防止重复爬取,需要将已爬取的URL和不可访问站点的MD5值保存在内存中。通过建立DNS缓存以减轻DNS服务器负担。爬虫采用了非阻塞连接和下载方式并设定超时,以提高爬虫下载速度。爬虫管理员可以通过访问http: //localhost:8080 来查 看爬虫运行情况。
在我的PC机(Ubuntu7. 04 ,双核CPU,2G内存,NAT局域网100M带宽)上短时间测试,设定150个爬虫线程,7分钟可以爬取25240个网页,下载1.4G数据量。注意这是在爬虫刚开始运行的较理想情况下,由于DNS的瓶颈限制以及爬行策略的设置可能会使速度远远低于这个数字。
( 2 )索引模块:分为正排索引和倒排索引两个子程序。其中正排索引程序从爬虫下载的网页文件中建立文档编号与文档偏移的索引文件(doc.index),然后对原始文档分词,建立正排索引(forward.index)。倒排索引程序读入正排索引,建立关键字到文档号的倒排索引,为了对网页进行排序,还要记录关键词在每个文档的出现次数。具体格式可以参考indexdesign.pdf文件。
( 3 )用户查询模块:
主要包括两个部分,分别是CGI程序和后台服务程序。后台服务程序在后台运行,启动时候读入索引文件。CGI程序由http服务器调用,用户每提交一次查询,CGI程序就会被调用一次。两个进程通过命名管道(FIFO)进行通信,CGI提交查询,后台服务程序查询并返回结果,CGI读入结果并输出。
******************
3 . 说明
由于时间和精力有限,xyzse第一版的开发周期非常短,因此很多地方不够完善。我们会在今后版本里不断对代码进行完善,并加入新的功能。
下面是首页截图

下一版本将要:
(1)加入网页排序功能,和动态网页内容摘要功能
(2)支持实现多个关键词查询功能
(3)加入爬虫的IP限制功能