【北大天网搜索引擎TSE学习笔记】第1节——环境搭建

    最近在看《搜索引擎——原理、技术与系统》一书,同时下载了书中介绍的原型系统——北大天网搜索引擎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所示的效果,跟商业搜索引擎没什么却别。    

图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:

TSE(Tiny Search Engine) ======================= (Temporary) Web home: http://162.105.80.44/~yhf/Realcourse/ TSE is free utility for non-interactive download of files from the Web. It supports HTTP. According to query word or url, it retrieve results from crawled pages. It can follow links in HTML pages and create output files in Tianwang (http://e.pku.edu.cn/) format or ISAM format files. Additionally, it provies link structures which can be used to rebuild the web frame. --------------------------- Main functions in the TSE: 1) normal crawling, named SE, e.g: crawling all pages in PKU scope. and retrieve results from crawled pages according to query word or url, 2) crawling images and corresponding pages, named ImgSE. --------------------------- INSTALL: 1) execute "tar xvfz tse.XXX.gz" --------------------------- Before running the program, note Note: The program is default for normal crawling (SE). For ImgSE, you should: 1. change codes with the following requirements, 1) In "Page.cpp" file, find two same functions "CPage::IsFilterLink(string plink)" One is for ImgSE whose urls must include "tupian", "photo", "ttjstk", etc. the other is for normal crawling. For ImgSE, remember to comment the paragraph and choose right "CPage::IsFilterLink(string plink)". For SE, remember to open the paragraph and choose righ "CPage::IsFilterLink(string plink)". 2) In Http.cpp file i. find "if( iPage.m_sContentType.find("image") != string::npos )" Comment the right paragraph. 3) In Crawl.cpp file, i. "if( iPage.m_sContentType != "text/html" Comment the right paragraph. ii. find "if(file_length < 40)" Choose right one line. iii. find "iMD5.GenerateMD5( (unsigned char*)iPage.m_sContent.c_str(), iPage.m_sContent.length() )" Comment the right paragraph. iv. find "if (iUrl.IsImageUrl(strUrl))" Comment the right paragraph. 2.sh Clean; (Note not remove link4History.url, you should commnet "rm -f link4History.url" line first) secondly use "link4History.url" as a seed file. "link4History" is produced while normal crawling (SE). --------------------------- EXECUTION: execute "make clean; sh Clean;make". 1) for normal crawling and retrieving ./Tse -c tse_seed.img According to query word or url, retrieve results from crawled pages ./Tse -s 2) for ImgSE ./Tse -c tse_seed.img After moving Tianwang.raw.* data to secure place, execute ./Tse -c link4History.url --------------------------- Detail functions: 1) suporting multithreads crawling pages 2) persistent HTTP connection 3) DNS cache 4) IP block 5) filter unreachable hosts 6) parsing hyperlinks from crawled pages 7) recursively crawling pages h) Outputing Tianwang format or ISAM format files --------------------------- Files in the package Tse --- Tse execute file tse_unreachHost.list --- unreachable hosts according to PKU IP block tse_seed.pku --- PKU seeds tse_ipblock --- PKU IP block ... Directories in the package hlink,include,lib,stack,uri directories --- Parse links from a page --------------------------- Please report bugs in TSE to MAINTAINERS: YAN Hongfei * Created: YAN Hongfei, Network lab of Peking University. * Created: July 15 2003. version 0.1.1 * # Can crawl web pages with a process * Updated: Aug 20 2003. version 1.0.0 !!!! * # Can crawl web pages with multithreads * Updated: Nov 08 2003. version 1.0.1 * # more classes in the codes * Updated: Nov 16 2003. version 1.1.0 * # integrate a new version linkparser provided by XIE Han * # according to all MD5 values of pages content, * for all the pages not seen before, store a new page * Updated: Nov 21 2003. version 1.1.1 * # record all duplicate urls in terms of content MD5
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值