Sphinx是一個基於SQL的全文檢索引擎,可以結合MySQL,PostgreSQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能
sphinx 安裝
Sphinx在mysql上的應用有兩種方式:
1. 采用API調用,如使用PHP、java等的API函數或方法查詢。優點是可不必對mysql重新編譯,服務端進程“低耦合”,且程序可靈活、方便的調用;缺點是如已有搜索程序的條件下,需修改部分程序。推薦程序員使用。
2. 使用插件方式(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個插件
1. Coreseek
Coreseek是現在用的最多的sphinx中文全文檢索,它提供了為Sphinx設計的中文分詞包LibMMSeg ,是基於sphinx的基礎上開發的。
2. sfc(Sphinx-for-chinese)
sfc(sphinx-for-chinese)是由網友happy兄提供的另外一個中文分詞插件。其中文詞典采用的是xdict。
本節主要介紹Coreseek的安裝方法
四、 Coreseek(支持中文檢索的sphinx)安裝1. 安裝升級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
2. 下載coreseek
新版本的coreseek將詞典和sphinx源程序放在了一個包中,因此只需要下載coreseek包就可以了。
wget http://www.wapm.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
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 ..
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 ..
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/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
6. 生成 mmseg詞庫及配置文件
新版本的已經自動生成。
sphinx api 的完整用法及重要屬性,整理一下,以防忘記!
//SPH_SORT_RELEVANCE 模式, 按相關度降序排列(最好的匹配排在最前面)SPH_SORT_ATTR_DESC 模式, 按屬性降序排列 (屬性值越大的越是排在前面)SPH_SORT_ATTR_ASC 模式, 按屬性升序排列(屬性值越小的越是排在前面)SPH_SORT_TIME_SEGMENTS 模式, 先按時間段(最近一小時/天/周/月)降序,再按相關度降序SPH_SORT_EXTENDED 模式, 按一種類似 SQL 的方式將列組合起來,升序或降序排列。SPH_SORT_EXPR 模式,按某個算術表達式排序。
//設置評分模式: * SPH_RANK_PROXIMITY_BM25, 默認模式,同時使用詞組評分和BM25評分,並且將二者結合。* SPH_RANK_BM25, 統計相關度計算模式,僅使用BM25評分計算(與大多數全文檢索引擎相同)。這個模式比較快,但是可能使包含多個詞的查詢的結果質量下降。 * SPH_RANK_NONE, 禁用評分的模式,這是最快的模式。實際上這種模式與布爾搜索相同。所有的匹配項都被賦予權重1。* SPH_RANK_WORDCOUNT, 根據關鍵詞出現次數排序。這個排序器計算每個字段中關鍵字的出現次數,然後把計數與字段的權重相乘,最後將積求和,作為最終結果。* SPH_RANK_PROXIMITY, 版本0.9.9-rc1新增,將原始的詞組相似度作為結果返回。在內部,這個模式被用來模擬SPH_MATCH_ALL的查詢。 * SPH_RANK_MATCHANY, 版本0.9.9-rc1新增,返回之前在SPH_MATCH_ANY中計算的位次,在內部這個模式用於模擬SPH_MATCH_ANY的查詢。* SPH_RANK_FIELDMASK, 版本0.9.9-rc2新增,返回一個32位掩碼,其中第N位對應第N個全文字段,從0開始計數,如果某個字段中出現了滿足查詢的關鍵詞,則對應的標志位被置1。
//連接到searchd服務器,根據服務器的當前設置執行給定的查詢,取得並返回結果集。$query是查詢字串,$index是包含一個或多個索引名的字符串。一旦發生一般錯誤,則返回假並設置GetLastError()信息。若成功則返回搜索的結果集。此外, $comment 將被發送到查詢日志中搜索部分的前面,這對於調試是非常有用的。目前,注釋的長度限制為128個字符以內。$index的默認值是"*",意思是對全部本地索引做查詢。索引名中允許的字符包括拉丁字母(a-z),數字(0-9),減號(-)和下劃線(_),其他字符均視為分隔符。因此,下面的示例調用都是有效的,而且會搜索相同的兩個索引: