最近在学习《搜索引擎——原理、技术与系统》这本书,书虽然有点年代感,但是技术永远不会过时。所以就来搭建一个自己的搜索引擎,下载源码,然后来学习,这里博客作笔记使用,同时也希望和更多的人一起讨论分享。
软件环境 | 版本号 |
---|---|
Ubuntu(Server) | 10.04.4 |
g++ | 4.1.3 |
gcc | 4.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.1
的GCC
,结果最终版本为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.1
和GCC4.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-8
为GB2312
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
包就足够了,如果要自己去抓取页面,就需要安装TSE
的tse
包了。
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节——环境搭建