完整部署北大天网搜索引擎TSE

最近在学习《搜索引擎——原理、技术与系统》这本书,书虽然有点年代感,但是技术永远不会过时。所以就来搭建一个自己的搜索引擎,下载源码,然后来学习,这里博客作笔记使用,同时也希望和更多的人一起讨论分享。

软件环境版本号
Ubuntu(Server)10.04.4
g++4.1.3
gcc4.1.3

Server版和Desktop版配置步骤基本一致的
至于为什么要用10.04不用18.04,这是配置这么多天这么多失败得出的经验,还是用10.04好。

1、简介

    下载TSE的源码,地址为:http://sewm.pku.edu.cn/book/。里面各种类型的文件较多,先对这些文件有个大概的了解。

我存在阿里云OSS的TSE源码:点击下载   
我这里有的我和闫老师发给我的源码,可以自取:链接:https://pan.baidu.com/s/1oBW0IZnWh0p3IZIntORSig 提取码:ogfv 复制这段内容后打开百度网盘手机App,操作更方便哦
点击可直接跳转,提取码:ogfv

大家可以到这里被大佬注释过的代码: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包。
    ——– 【北大天网搜索引擎TSE学习笔记】第1节——环境搭建

2、部署基础环境

2.1换源

如果新虚拟机的话,必须换源才能正常使用

打开/etc/apt/sources.list,打开源列表文件,把如下内容粘贴到最下面,最好提前备份一下

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb  

deb http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse    

deb http://old-releases.ubuntu.com/ubuntu lucid-security main restricted universe multiverse    

deb http://old-releases.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse    

deb http://old-releases.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse    

deb http://old-releases.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse    

deb-src http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse    

deb-src http://old-releases.ubuntu.com/ubuntu lucid-security main restricted universe multiverse    

deb-src http://old-releases.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse    

deb-src http://old-releases.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse    

deb-src http://old-releases.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse  

2.2 gcc/g++降版本

由于gcc版本过高,天网所需的gcc不需要那么高的版本,所以需要降版本。

Ubuntu 10.04下默认的GCC版本是GCC 4.4.1,而大多时候,我们需要使用GCC4.1.2,所以需要自己安装低版本的GCC 4.1.2。不过我尝试过,安装版本为4.1GCC,结果最终版本为4.1.3的,好像也可以用,,,好了废话少说,请跟着下面的步骤:

首先通过apt-get安装GCC4.1

sudo apt-get install gcc-4.1  

安装了之后,系统之中就存在两个GCC版本4.4和4.1,可以通过ls命令查看:

ls /usr/bin/gcc*   
/usr/bin/gcc  /usr/bin/gcc-4.1  /usr/bin/gcc-4.4  /usr/bin/gccbug-4.1  

但是这时系统默认的GCC还是4.4版的,可以通过gcc -v查看版本号

设置GCC4.1GCC4.4的可选项,在终端输入以下命令

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 40   
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30  

现在设置GCC的默认版本,输入下面命令:

sudo update-alternatives --config gcc

我得到的结果:

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-4.4   40        auto mode
  1            /usr/bin/gcc-4.1   30        manual mode
  2            /usr/bin/gcc-4.4   40        manual mode

然后输入“1”,再查看一下gcc的版本,已经变成4.1的了

同样对于g++也可以使用同样的方法从4.4高版本切换到4.1低版本

接下来,g++ 同样的步骤操作

sudo apt-get install g++-4.1
sudo apt-get install g++-4.1-multilib
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.1 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 60
sudo update-alternatives --config g++
  Selection   Path        Priority  Status
------------------------------------------------------------
* 0       /usr/bin/g++-4.4  60     auto mode
  1       /usr/bin/g++-4.1  40     manual mode
  2       /usr/bin/g++-4.4  60     manual mode

选择1.

如果想改为高版本的随时用update-alternatives --config 命令切换!

2.3 安装所需依赖

1、安装zlib

自行官网下载zlib-1.2.3,官网貌似不行了

可以我存在阿里云的:点击下载

$ tar xvzf zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ ./configure
$ make
$ sudo make install

2、安装包flex
在终端输入:

$ sudo apt-get install flex bison

2.4 安装Apache2

$ sudo apt-get install apache2
  • 打开:sudo /etc/init.d/apache2 start
  • 关闭:sudo /etc/init.d/apache2 stop
  • 重起:sudo /etc/init.d/apache2 restart

Apache2安装成功后不做任何修改,打开浏览器访问http://localhost/或者是可以通过公网或者内网访问的http://IP/,如果显示It works!的网页,就说明安装功了。

3、部署TSE

3.1 安装index包

下载TSE的index包到root根目录下:点击下载

$ tar -zxvf index.090422-2245.Linux.tar.gz
$ cd index
$ sudo make

3.2 配置服务

1、如果以下目录不存在则创建

  • /var/www/html/
  • /var/www/html/yc-cgi-bin/index/
  • /var/www/html/yc/TSE/

2、把index/public_html中的所有文件拷贝到var/www/html/中,实际上这些文件就是TSE搜索引擎首页的页面文件和资源文件

3、把index/public_html中的所有文件拷贝到/var/www/html/yc/TSE/

4、将make后的文件放到/var/www/html/yc-cgi-bin/index/中。/var/www/html/yc-cgi-bin/index/目录实际上是该站点cgi程序的路径,也就是实现搜索功能的可执行程序所在的目录。

3.3配置apache文件

1、配置/etc/apache2/conf-enabled/charset.conf文件
Apache版本为:Server version: Apache/2.2.14 (Ubuntu)

sudo vim /etc/apache2/conf-enabled/charset.conf

# AddDefaultCharset UTF-8前面的#去掉,修改UTF-8GB2312
2、 配置/etc/apache2/sites-available/default文件

sudo vim /etc/apache2/sites-available/default

第一处:
修改

DocumentRoot /var/www

DocumentRoot /var/www/html

第二处:

        <Directory /var/www>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

第三处:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

ScriptAlias /yc-cgi-bin/index/ /var/www/html/yc-cgi-bin/index/

第四处:

        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        <Directory "/var/www/html/yc-cgi-bin/index/">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

修改后完整文件为:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html # 第一处
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/html> # 第二处
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /yc-cgi-bin/index/ /var/www/html/yc-cgi-bin/index/ # 第三处
        <Directory "/var/www/html/yc-cgi-bin/index/"> # 第四处
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

重启apache2

sudo /etc/init.d/apache2 restart

然后在浏览器输入ip则出现天网首页,并且可用。

在这里插入图片描述
在这里插入图片描述

4、部署tse抓包程序

如果只是架设TSE搜索引擎,安装Index包就足够了,如果要自己去抓取页面,就需要安装TSEtse包了。

4.1 下载编译

下载TSE的tse包到root根目录下:点击下载

tar -zxvf tse.081227-1441.Linux.tar.gz
cd tse
sudo make

4.2 搜集网页

4.2.1 运行蜘蛛程序

sudo nohup ./Tse -c tse_seed.pku &

运行这句代码的时候,TSE的蜘蛛就开始去网络上抓取页面了。爬取后会得到10个Tianwang.raw.*****tse的文件夹下。

4.2.2 重新配置搜索引擎数据

选取一个移到tar 后的index文件中。打开index中的DocIndex.cpp, Comm.h, Snapshot.cpp找到其中的Tianwang.raw.2559638448 改成 Tianwang.raw.*****

注意,*****的数字应为你之前移到Index中的那个。

cd index
sudo make
./DocIndex

打开生成的Doc.idx记住最后的数字。打开DocSegment.cpp按源码的提示将MAX_DOC_ID的值改为此数字。

在终端再次 make

sudo make
./DocIndex got Doc.idx, Url.idx, DocId2Url.idx
sort Url.idx|uniq > Url.idx.sort_uniq
./DocSegment Tianwang.raw.×× got Tianwang.raw.××.seg # xx 自己替换为之前替换的数字
./CrtForwardIdx Tianwang.raw.××.seg > moon.fidx
# set | grep “LANG”
LANG=en; export LANG;
sort moon.fidx > moon.fidx.sort
./CrtInvertedIdx moon.fidx.sort > sun.iidx

将得到的sun.iidx, Url.idx.sort_uniq放到/var/www/html/yc-cgi-bin/index/Data文件夹中则完成替换。

参考:

Ubuntu 12.04更新源(有10的源)
Ubuntu 10.04下安装gcc4.1与g++4.1
Ubuntu10.04中安装低版本的GCC和G++编译器
黄聪:如何在ubuntu下搭建自己的TSE搜索引擎
TSE部署实践
【北大天网搜索引擎TSE学习笔记】第1节——环境搭建

相关文章

发表回复

您的电子邮箱地址不会被公开。