您好,登錄后才能下訂單哦!
本篇內容介紹了“全文搜索Sphinx怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Sphinx是由俄羅斯人Andrew Aksyonoff開發的一個全文檢索引擎。意圖為其他應用提供高速、低空間占用、高結果 相關度的全文搜索功能。Sphinx可以非常容易的與SQL數據庫和腳本語言集成。當前系統內置MySQL和PostgreSQL 數據庫數據源的支持,也支持從標準輸入讀取特定格式 的XML數據。通過修改源代碼,用戶可以自行增加新的數據源(例如:其他類型的DBMS 的原生支持)
高速的建立索引(在當代CPU上,峰值性能可達到10 MB/秒);
高性能的搜索(在2 – 4GB 的文本數據上,平均每次檢索響應時間小于0.1秒);
可處理海量數據(目前已知可以處理超過100 GB的文本數據, 在單一CPU的系統上可 處理100 M 文檔);
提供了優秀的相關度算法,基于短語相似度和統計(BM25)的復合Ranking方法;
支持分布式搜索;
支持短語搜索
提供文檔摘要生成
可作為MySQL的存儲引擎提供搜索服務;
支持布爾、短語、詞語相似度等多種檢索模式;
文檔支持多個全文檢索字段(最大不超過32個);
文檔支持多個額外的屬性信息(例如:分組信息,時間戳等);
支持斷詞;
中文的全文檢索和英文等latin系列不一樣,后者是根據空格等特殊字符來斷詞,而中文是根據語義來分詞。目前大多數數據庫尚未支持中文全文檢索,如Mysql。故,國內出現了一些Mysql的中文全文檢索的插件,做的比較好的有hightman的中文分詞。Sphinx如果需要對中文進行全文檢索,也得需要一些插件來補充。其中我知道的插件有 coreseek 和 sfc 。
Coreseek是現在用的最多的sphinx中文全文檢索,它提供了為Sphinx設計的中文分詞包LibMMSeg 。并提供了多個系統的二進制發行版,其中有rpm,deb及windows下的二進制包。另外,coreseek也為sphinx貢獻了以下事項:
GBK編碼的數據源支持
采用Chih-Hao Tsai MMSEG算法的中文分詞器
中文使用手冊(這份中文手冊對國內使用sphinx新手——特別是英語不太好的人來說,提供了極大的便利)
sfc(sphinx-for-chinese)是由網友happy兄提供的另外一個中文分詞插件。其中文詞典采用的是xdict。據其介紹,經過測試,目前版本在索引速度上(Linux 測試平臺)基本上能夠達到索引UTF-8英文的一半,即官方宣稱速度的一半。(時間主要是消耗在分詞上)。 現提供了與sphinx最新版(sphinx 0.9.10)同步的sphinx-for-chinese-0.9.10-dev-r2006.tar.gz 。此版本增加了sql_attr_string,經過本人的測試。其安裝和配置都非常方便。happy兄在分詞方面還有另外一個貢獻——php-mmseg,這是php對中文分詞的一個擴展庫。
在此,對以上二位作者謹以最大的敬意
此外,如果你對中文分詞不感興趣。或者說僅需要實現類似sql中like的功能,如: select * from product where prodName like ‘%手機%’。sphinx也不會讓你失望,這個或許就是官網對中文的簡單實現——直接對字索引。并且搜索速度還不錯^_^ 。
本文會對以上三種中文應用進行測試,并以文檔的方式記錄下來,這也許正是本文檔的重點。
Sphinx在mysql上的應用有兩種方式:
①、采用API調用,如使用PHP、java等的API函數或方法查詢。優點是可不必對mysql重新編譯,服務端進程“低耦合”,且程序可靈活、方便的調用;
缺點是如已有搜索程序的條件下,需修改部分程序。推薦程序員使用。
②、使用插件方式(sphinxSE)把sphinx編譯成一個mysql插件并使用特定的sql語句進行檢索。其特點是,在sql端方便組合,且能直接返回數據給客戶端
不必二次查詢(注),在程序上僅需要修改對應的sql,但這對使用框架開發的程序很不方便,比如使用了ORM。另外還需要對mysql進行重新編譯,且需要mysql-5.1以上版本
支持插件存儲。系統管理員可使用這種方式
二次查詢注:到現在發布版本為止——sphinx-0.9.9,sphinx在檢索到結果后只能返回記錄的ID,而非要查的sql數據,故需要重新根據這些ID再次從數據庫中查詢,
正在開發的sphinx 0.9.10版本已可存儲這些文本數據,作者曾試過,性能和存儲上的效果都不佳,畢竟還沒出正式版
本文采用的是第一種方式
在*nix系統下安裝,首先需要以下一些軟件支持
軟件環境:
操作系統:Centos-5.2
數據庫:mysql-5.0.77-3.el5 mysql-devel(如果要使用sphinxSE插件存儲請使用mysql-5.1以上版本)
編譯軟件:gcc gcc-c++ autoconf automake
中文的全文檢索和英文等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包就可以了。
http://pan.baidu.com/s/1dEK4x3r
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 ..
如果出現這種報錯config.status: error: cannot find input file: src/Makefile.in,就在configure 之前執行如下命令
aclocal
libtoolize --force automake --add-missing autoconf autoheader make clean
“全文搜索Sphinx怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。