最近在學習《搜索引擎——原理、技術與系統》這本書,書雖然有點年代感,但是技術永遠不會過時。所以就來搭建一個自己的搜索引擎,下載源碼,然後來學習,這裏博客作筆記使用,同時也希望和更多的人一起討論分享。
軟件環境 | 版本號 |
---|---|
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節——環境搭建