Sphinx是由俄羅斯人Andrew Aksyonoff開發的一個全文檢索引擎。意圖爲其餘應用提供高速、低空間佔用、高結果 相關度的全文搜索功能。Sphinx能夠很是容易的與SQL數據庫和腳本語言集成。當前系統內置MySQL和PostgreSQL 數據庫數據源的支持,也支持從標準輸入讀取特定格式 的XML數據。php
Sphinx的特性以下:java
a) 高速的創建索引(在當代CPU上,峯值性能可達到10 MB/秒);mysql
b) 高性能的搜索(在2 – 4GB 的文本數據上,平均每次檢索響應時間小於0.1秒);linux
c) 可處理海量數據(目前已知能夠處理超過100 GB的文本數據, 在單一CPU的系統上可 處理100 M 文檔);程序員
d) 提供了優秀的相關度算法,基於短語類似度和統計(BM25)的複合Ranking方法;算法
e) 支持分佈式搜索;sql
f) 支持短語搜索數據庫
g) 提供文檔摘要生成bootstrap
h) 可做爲MySQL的存儲引擎提供搜索服務;api
i) 支持布爾、短語、詞語類似度等多種檢索模式;
j) 文檔支持多個全文檢索字段(最大不超過32個);
k) 文檔支持多個額外的屬性信息(例如:分組信息,時間戳等);
l) 支持斷詞;
雖然mysql的MYISAM提供全文索引,可是性能卻不敢讓人恭維,另外數據庫畢竟不是很善於作這樣的事情,咱們須要把這些活讓給更適合的程序去作,減小數據庫的壓力。所以採用Sphinx來作mysql的全文索引工具是一個很好的選擇。這個星期主要來學習這個這個工具的使用,下面將學習過程大體的記錄一下,作個備忘,也但願能對學習這個工具的其餘朋友有所啓發。
Sphinx在mysql上的應用有兩種方式:
這裏的安裝主要介紹的是第一種經過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
注意:採用這種方式安裝不支持中文分詞。
中文的全文檢索和英文等latin系列不同,後者是根據空格等特殊字符來斷詞,而中文是根據語義來分詞。中文分詞主要有2個插件
Coreseek是如今用的最多的sphinx中文全文檢索,它提供了爲Sphinx設計的中文分詞包LibMMSeg ,是基於sphinx的基礎上開發的。
sfc(sphinx-for-chinese)是由網友happy兄提供的另一箇中文分詞插件。其中文詞典採用的是xdict。
本文主要介紹Coreseek的安裝方法
由於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將詞典和sphinx源程序放在了一個包中,所以只須要下載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 ..
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 ..
備註:須要預先設置好字符集爲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
新版本的已經自動生成。
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/