sphinx的安裝篇

一、  Sphinx簡介

Sphinx是由俄羅斯人Andrew Aksyonoff開發的一個全文檢索引擎。意圖爲其他應用提供高速、低空間佔用、高結果相關度的全文搜索功能。Sphinx可以非常容易的與SQL數據庫和腳本語言集成。當前系統內置MySQL和PostgreSQL 數據庫數據源的支持,也支持從標準輸入讀取特定格式的XML數據。

Sphinx的特性如下:

a)  高速的建立索引(在當代CPU上,峯值性能可達到10 MB/秒);

b)  高性能的搜索(在2 – 4GB 的文本數據上,平均每次檢索響應時間小於0.1秒);

c)  可處理海量數據(目前已知可以處理超過100 GB的文本數據, 在單一CPU的系統上可處理100 M 文檔);

d)  提供了優秀的相關度算法,基於短語相似度和統計(BM25)的複合Ranking方法;

e)  支持分佈式搜索;

f)  支持短語搜索

g)  提供文檔摘要生成

h)  可作爲MySQL的存儲引擎提供搜索服務;

i)  支持布爾、短語、詞語相似度等多種檢索模式;

j)  文檔支持多個全文檢索字段(最大不超過32個);

k)  文檔支持多個額外的屬性信息(例如:分組信息,時間戳等);

l)  支持斷詞;

雖然mysql的MYISAM提供全文索引,但是性能卻不敢讓人恭維,另外數據庫畢竟不是很善於做這樣的事情,我們需要把這些活讓給更適合的程序去做,減少數據庫的壓力。因此採用Sphinx來做mysql的全文索引工具是一個很好的選擇。這個星期主要來學習這個這個工具的使用,下面將學習過程大致的記錄一下,做個備忘,也希望能對學習這個工具的其他朋友有所啓發。

二、  Sphinx安裝

Sphinx在mysql上的應用有兩種方式:

1.    採用API調用,如使用PHP、java等的API函數或方法查詢。優點是可不必對mysql重新編譯,服務端進程“低耦合”,且程序可靈活、方便的調用;缺點是如已有搜索程序的條件下,需修改部分程序。推薦程序員使用。

2.    使用插件方式(sphinxSE)把sphinx編譯成一個mysql插件並使用特定的sql語句進行檢索。其特點是,在sql端方便組合,且能直接返回數據給客戶端。不必二次查詢,在程序上僅需要修改對應的sql,但這對使用框架開發的程序很不方便,比如使用了ORM。另外還需要對mysql進行重新編譯,且需要mysql-5.1以上版本支持插件存儲。

這裏的安裝主要介紹的是第一種通過api調用的方式。Sphinx的安裝如下:

#下載最新穩定版

wgethttp://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz

tar xzvf sphinx-0.9.9.tar.gz

cd sphinx-0.9.9

./configure --prefix=/usr/local/sphinx/   --with-mysql  --enable-id64

make

make install

注意:採用這種方式安裝不支持中文分詞。

三、  Sphinx中文分詞

中文的全文檢索和英文等latin系列不一樣,後者是根據空格等特殊字符來斷詞,而中文是根據語義來分詞。中文分詞主要有2個插件

1.    Coreseek

Coreseek是現在用的最多的sphinx中文全文檢索,它提供了爲Sphinx設計的中文分詞包LibMMSeg ,是基於sphinx的基礎上開發的。

2.    sfc(Sphinx-for-chinese)

sfc(sphinx-for-chinese)是由網友happy兄提供的另外一箇中文分詞插件。其中文詞典採用的是xdict

本文主要介紹Coreseek的安裝方法

四、  Coreseek(支持中文檢索的sphinx)安裝

1.    安裝升級autoconf

因爲coreseek需要autoconf2.64以上版本,因此需要升級autoconf,不然會報錯從http://download.chinaunix.net/download.php?id=29328&ResourceID=648下載autoconf-2.64.tar.bz2,安裝方法如下:

tar -jxvf autoconf-2.64.tar.bz2

cd autoconf-2.64

./configure

make

make install

2.    下載coreseek

新版本的coreseek將詞典和sphinx源程序放在了一個包中,因此只需要下載coreseek包就可以了。

3.    安裝mmseg(coreseek所使用的詞典)

tar xzvf coreseek-3.2.14.tar.gz

cd mmseg-3.2.14

./bootstrap    #輸出的warning信息可以忽略,如果出現error則需要解決

./configure --prefix=/usr/local/mmseg3

make && make install

cd ..

***************************************************************************************************

解決configure: error: C++ compiler cannot create executables問題

yum install gcc gcc-c++ gcc-g77

***************************************************************************************************

安裝Coreseek編譯mmseg提示cannot find input file: src/Makefile.in錯誤

解決辦法依次運行下面命令:
aclocal    ##aclocal:command not found 錯誤解決方法:yum -y install libtool
libtoolize --force ##運行後有一個錯誤,不用管它。
automake --add-missing
autoconf
autoheader
make clean
./configure --prefix=/usr/local/mmseg3
通過了
make
make install
安裝完成後,mmseg使用的詞典和配置文件,自動安裝在/usr/local/mmseg3/etc中

***************************************************************************************************

4.    安裝coreseek(sphinx)

cd csft-3.2.14

sh buildconf.sh    #輸出的warning信息可以忽略,如果出現error則需要解決

./configure --prefix=/usr/local/coreseek  --without-unixodbc  --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql

make && make install

cd ..

***************************************************************************************************

ERROR: cannot find MySQL include files. 錯誤

yum install mysql-devel

***************************************************************************************************

5.    測試mmseg分詞和coreseek搜索

備註:需要預先設置好字符集爲zh_CN.UTF-8,確保正確顯示中文,我的系統字符集爲en_US.UTF-8也是可以的。

cd testpack

cat var/test/test.xml  #此時應該正確顯示中文

/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etcvar/test/test.xml

/usr/local/coreseek/bin/indexer -c etc/csft.conf --all

/usr/local/coreseek/bin/search -c etc/csft.conf 網絡搜索

此時正確的應該返回

words:

1. '網絡': 1 documents, 1 hits

2. '搜索': 2 documents, 5 hits

***************************************************************************************************

ERROR: index 'xml': failed to configure some of the sources, will not index.錯誤

yum install expat-devel

然後再重新編譯coreseek,但執行make前記得先make clean下清除掉原先沒有該依賴時編譯生成的內容。

***************************************************************************************************

6.    生成 mmseg詞庫及配置文件

新版本的已經自動生成。

五、  參考文章:

Sphinx中文指南

http://www.sphinxsearch.org/sphinx-tutorial

Sphinx中文分詞應用

http://www.sphinxsearch.org/archives/82

Sphinx 0.9.8參考手冊

CoreSeek BSD/Linux下的安裝

http://www.coreseek.cn/products/products-install/install_on_bsd_linux/


http://blog.chinaunix.net/uid-20639775-id-3261834.html

發佈了137 篇原創文章 · 獲贊 34 · 訪問量 175萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章