標籤:des http java 使用 strong 檔案
一、 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上的應用有兩種方式:
- 採用API調用,如使用PHP、java等的API函數或方法查詢。優點是可不必對mysql重新編譯,服務端進程“低耦合”,且程式可靈活、方便的調用;缺點是如已有搜尋程式的條件下,需修改部分程式。推薦程式員使用。
- 使用外掛程式方式(sphinxSE)把sphinx編譯成一個mysql外掛程式並使用特定的sql語句進行檢索。其特點是,在sql端方便組合,且能直接返回資料給用戶端。不必二次查詢,在程式上僅需要修改對應的sql,但這對使用架構開發的程式很不方便,比如使用了ORM。另外還需要對mysql進行重新編譯,且需要mysql-5.1以上版本支援外掛程式儲存。
這裡的安裝主要介紹的是第一種通過api調用的方式。Sphinx的安裝如下:
#下載最新穩定版
wget http://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個外掛程式
- Coreseek
Coreseek是現在用的最多的sphinx中文全文檢索索引,它提供了為Sphinx設計的中文分詞包LibMMSeg ,是基於sphinx的基礎上開發的。
- sfc(Sphinx-for-chinese)
sfc(sphinx-for-chinese)是由網友happy兄提供的另外一個中文分詞外掛程式。其中文詞典採用的是xdict。
本文主要介紹Coreseek的安裝方法
四、 Coreseek(支援中文檢索的sphinx)安裝
- 安裝升級autoconf
因為coreseek需要autoconf 2.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
- 下載coreseek
新版本的coreseek將詞典和sphinx來源程式放在了一個包中,因此只需要下載coreseek包就可以了。
wget http://www.wapm.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
- 安裝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 ..
- 安裝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 ..
- 測試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/etc var/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
- 產生 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/