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

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

軟件環境 版本號
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.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節——環境搭建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章