最近在看《搜索引擎——原理、技术与系统》一书,同时下载了书中介绍的原型系统——北大天网搜索引擎TSE的源代码进行学习。之前没有任何搜索引擎方面的基础,也没有web开发经验,一切从零开始学习。为了记录学到的知识以备日后之用,也为了与大家分享并一起学习探讨,将学习的过程整理成笔记,连载发布于本博客。声明一下,我不是高手,我是菜鸟,从零开始学习,所以如果文中有错误之处敬请大家批评指出,也欢迎感兴趣的朋友一起学习探讨。(QQ:44452114,微博:http://weibo.com/liubing2000)。
1、简介
下载TSE的源码,地址为:http://sewm.pku.edu.cn/book/。里面各种类型的文件较多,先对这些文件有个大概的了解。
(很多朋友反映上面的地址已经下不到了,大家可以到这里下我注释过的代码:http://git.oschina.net/lewsn2008/LBTSE)
第一,README.txt是对软件包的介绍,可以先看看该文件对系统的源代码的简介。其实不管拿到什么软件或者程序,阅读Readme.txt是一个好的习惯。
第二,TSE.mp3和TSE.pdf为原书作者之一闫宏飞提供的对TSE系统讲解的录音和讲稿,大家可以先对照讲稿听闫老师的讲解,对系统的原理有个初步的了解;
第三,tse_tutorial.pdf 是侯锐学习过程中写的,主要是关于环境搭建的过程。不过本人觉得介绍的并不详细,新手(对于该系统的新手)拿到后并不能很清楚的理解,因而照着操作也不一定能成功,当然可以拿来参考;
第四,《搜索引擎——原理、技术与系统》(后文简称为”《搜索》“)书中介绍搜索引擎工作流程主要分为三个阶段:网页搜集、预处理和查询服务,index.XXXXXX-XXXX.Linux.tar.gz文件对应TSE系统的预处理和查询服务子系统;
第五,tse.XXXXXX-XXXX.Linux.tar.gz对应TSE系统的网页搜集子系统(也可称为网页抓取程序,即俗称的爬虫程序)。
TSE的查询服务(在index.XXXXXX-XXXX.Linux.tar.gz中)是可以独立运行的,不依赖于网页搜集和预处理,因为在index.XXXXXX-XXXX.Linux.tar.gz包中已经包含了网页搜集和预处理模块的结果数据。解压index.XXXXXX-XXXX.Linux.tar.gz后可以看到一个Data目录,该目录中主要存储了网页搜集和预处理模块的结果数据,其中Tianwang.raw.2559638448为网页搜集模块抓取的原始网页数据(以天网格式存储),sun.iidx为倒排索引的关键词索引文件(即原始文件中所有的关键词到包含该关键词的网页的id的映射),Doc.idx为网页索引文件(网页的id到在原始网页数据文件中存储位置的映射)。如果不能理解这些数据文件,没有关系,在第二节中将详细介绍。
TSE的查询服务子系统可以独立运行是很好理解的,因为搜索引擎的三个阶段是可以相互独立的,如同商业化的搜索引擎也是一样的,网页搜集子系统运行一次后搜集到很多网页数据,便可以经过预处理后提供查询服务,当然这里的查询是基于已经搜集的网页数据的查询,而不是每一次查询服务都要到网络上实时的抓取网页,所以不能保证与网络上的实时的网页数据保持一致。本系统的index.XXXXXX-XXXX.Linux.tar.gz独立运行时便是基于已经搜集的网页数据Tianwang.raw.2559638448进行查询的,如果需要基于新的网页数据进行查询,就需要运行网页搜集模块(tse.XXXXXX-XXXX.Linux.tar.gz)重新抓取网页。
既然查询服务子系统可以独立运行,我们可以先把查询服务子系统运行起来,先不管预处理和网页搜集的过程,可以说我将以倒叙的方式来进行说明,先是查询服务,再是预处理,然后是网页搜集。我们先来研究index.XXXXXX-XXXX.Linux.tar.gz包。
2、安装Apache2
查询服务子系统运行起来后是如图1所示的效果,跟商业搜索引擎没什么却别。
既然展现出来的是一个网页程序,所以需要搭建web服务器,TSE系统用的是Apache2服务器,关于web开发的内容我不敢在此啰嗦,因为我本人也没有做过web开发,不能在这里误导大家,仅仅是把我操作的过程在这里与大家分享,如果有错误之处大家尽管批评指正。Ubuntu下Apache2安装与配置的详细介绍可以参考这两篇文章:
http://www.blogjava.net/duanzhimin528/archive/2010/03/05/314564.html,
http://blog.csdn.net/rookieding/article/details/7314054
我的系统是Ubuntu10.10,安装指令:sudo apt-get install apache2,如果安装失败的话,可以运行:sudo apt-get update更新源后再重新尝试。
安装成功后有三个目录很重要,以下进行说明:
(1)/etc/init.d/,该目录中的apache2文件用于启动、停止和重启apache2服务器
启动:sudo /etc/init.d/apache2 start
停止:sudo /etc/init.d/apache2 stop
重启:sudo /etc/init.d/apache2 restart
(2)/etc/apache2/,该目录主要包含apache2服务器的配置相关的文件
apache2.conf是主配置文件,httpd.conf是用户配置文件,我在安装完后httpd.conf中是空的,并没有网上文档中说的那些配置项。sites-available目录为可用站点配置,sites-enable目录为启用的站点配置,可以看到sites-enable目录只有一个链接文件,链接到../sites-available/default,所以该default文件便是默认的启用的站点的配置文件。里面的主要内容如下:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/这里配置站点的web文档根目录的地址,后面会修改这里!
......
(3)/var/www/,该目录是上面介绍的站点的web文档根目录的位置
默认的站点网页文件会放在这里,但是可以修改上面的配置文件来修改,TSE系统中会进行修改,后面介绍!
Apache2安装成功后不做任何修改,打开浏览器访问http://localhost/,如果显示It works! 的网页(如下图所示),就说明安装功了。
图2
多啰嗦两句,这里为什么会显示这样的一个网页页面呢?前面介绍了默认情况下站点的web文档的根目录位置在/var/www/,打开该目录会找到一个index.html的文件,这个便是显示的网页页面的文件,vim index.html打开文件可以看到,文件中的内容确实是网页中显示的内容。
3、创建服务器目录并准备文件
从这里开始搭建自己的web服务器,准备TSE搜索引擎的页面文件和后台搜索程序等,将这些文件放置在web服务器的相应目录中。前面介绍了web站点的默认根目录在/var/www/,也可以进行修改,由于TSE系统的源代码中不是用的该默认目录,为了不去修改源代码所以修改站点的根目录,将web站点搭建在与源代码中相同的位置,下面开始操作(可参考tse_tutorial.pdf)。
(1)如果以下目录不存在则创建,/var/www/html/,/var/www/html/yc-cgi-bin/index/,/var/www/yc/TSE/;
(2)编译源代码:
tar zxvf index.XXXXXX-XXXX.Linux.tar.gz 解压
cd index 进入index目录
make 进行编译生成
(3)把index/public_html中的所有文件拷贝到/var/www/html/中,实际上这些文件就是TSE搜索引擎首页(图1)的页面文件和资源文件,里面的index.html即页面文件,还有.gif和.JPG即页面的图片文件;
(4)把index/public_html中的所有文件拷贝到/var/www/html/yc/TSE/中,暂时不明白这里为什么要做这一步!
(5)tse_tutorial.pdf中写到”将make 后的文件放到/var/www/html/yc-cgi-bin/index/ 中“,这里实际上不需要把index目录中的所有文件拷贝过去,而只需要拷贝make后生成的可执行程序和数据文件(包括ChSeg目录、Data目录和words.dict链接文件),源文件(.h和.cpp)和目标文件(.o)是不需要的。当然,如果不理解或者嫌麻烦也可以将所有文件都拷贝过去。/var/www/html/yc-cgi-bin/index/目录实际上是该站点cgi程序的路径,也就是实现搜索功能的可执行程序所在的目录。关于cgi可以搜索相关的资料学习。
4、修改web服务器配置
(1)配置字符集
设置默认字符集,定义服务器返回给客户机默认字符集(由于西欧UTF-8是Apache默认字符集,因此当访问有中文的网页时会出现乱码,这时只要将字符集改成GB2312,再重启Apache服务即可)。——引用自:http://www.blogjava.net/duanzhimin528/archive/2010/03/05/314564.html。
与tse_tutorial.pdf中说的不一样,不是修改/etc/httpd/conf/httpd.conf,而是修改/etc/apache2/conf.d/charset,在文件中加入:AddDefaultCharset GB2312。
(2)配置web站点根目录和cgi程序目录
因为3中已经将网页文件放到/var/www/html/,也就是该web站点以该目录为根目录,所以需要修改Apache2的配置文件进行配置。3中将可执行程序(cgi程序)放到/var/www/html/yc-cgi-bin/index/,所以需要配置Apache2的配置文件修改cgi程序目录。与tse_tutorial.pdf中说的不一样,不是修改/etc/httpd/conf/httpd.conf,而是修改/etc/apache2/sites-available/default,修改如下:
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
改为:
DocumentRoot /var/www/html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html/>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
改为:
ScriptAlias /yc-cgi-bin/index/ /var/www/html/yc-cgi-bin/index/
<Directory "/var/www/html/yc-cgi-bin/index/">
至此,TSE查询服务子系统搭建完毕,重启Apache2:
sudo /etc/init.d/apache2 restart。
打开浏览器,输入“http://localhost/"就出现了北大天网的搜索页面(如图1所示)。
至于这里为什么会显示图1所示的页面,前面已经说明过,因为在Apache2中已经配置了服务器的站点根目录为/var/www/html/,该目录中的index.html便是默认的显示页面文件。
By: