資源描述:
《sphinx社區(qū)全文搜索平臺配置手冊》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、千萬級Discuz!數(shù)據(jù)全文檢索方案(Sphinx)前言:康盛創(chuàng)想的Discuz!從創(chuàng)立之初即以提高產(chǎn)品效率為突破口,隨著編譯模板,語法生成內(nèi)核,數(shù)據(jù)緩存和自動(dòng)更新機(jī)制等獨(dú)創(chuàng)或獨(dú)有技術(shù)的應(yīng)用,和堅(jiān)固的數(shù)據(jù)結(jié)構(gòu)及最少化數(shù)據(jù)庫查詢設(shè)計(jì),使得Discuz!可以在極為繁忙的服務(wù)器環(huán)境下快速高效穩(wěn)定運(yùn)行。由于Discuz!產(chǎn)品依賴MySQL數(shù)據(jù)庫性能,在全文檢索方面如果僅僅依靠MySQL的LIKE%關(guān)鍵詞%語句無法取得理想的成績。本文闡述經(jīng)過Discuz!生產(chǎn)環(huán)境考驗(yàn)的構(gòu)建在Sphinx基礎(chǔ)上的千萬級Discuz!數(shù)據(jù)全文檢索解決方案。出自俄羅斯的開源全文搜索引擎軟
2、件Sphinx在單一索引達(dá)到4千萬條記錄情況下的查詢速度仍為0.x秒甚至0.0x秒級別。Sphinx創(chuàng)建索引的速度約五分鐘處理百萬條記錄,對于每分鐘的增量索引重建只需要幾十秒,每日的增量索引合并到主索引也只需一分鐘左右。此構(gòu)架基礎(chǔ)上的Discuz!高負(fù)載站點(diǎn),已成功解決搜索速度慢、經(jīng)常鎖表、無法分布式搜索等問題。千萬級Discuz!數(shù)據(jù)全文檢索方案(Sphinx)適用于繁忙的站點(diǎn)并且論壇訪問者有大量的搜索需求,本方案主要解決搜索緩慢問題。本文環(huán)境以CentOS5為基準(zhǔn)。初始化一次全部索引,按系統(tǒng)計(jì)劃任務(wù)crontab定時(shí)方式,每5分鐘重建一次增量索引(增量
3、索引不與主索引合并),每日凌晨3:30建立一次昨日比較的增量索引(合并到主索引中)。主索引建立在磁盤目錄/data/sphdata,增量索引建立在內(nèi)存/dev/shm/中避免大量的I/O操作,由于帖子編輯限制,全部索引每兩個(gè)月重建一次。目錄千萬級Discuz!數(shù)據(jù)全文檢索方案(Sphinx)1Sphinx快速介紹2一、Sphinx全文檢索方案構(gòu)架圖3二、Sphinx中文分詞4三、Sphinx安裝步驟41.安裝、升級所需的程序庫42.創(chuàng)建安裝文件夾并下載源代碼43.安裝MMseg中文分詞44.安裝CSFT(Sphinx的CoreSeek修改版)55.編譯Sp
4、hinx過程可能出現(xiàn)的錯(cuò)誤5a)無法找到mysql路徑5b)無法找到libiconv5c)無法找到libmysqlclient.so.155d)php5.2.11版本的apiBUG5e)生成索引時(shí)容易發(fā)生磁盤空間不足寫入失敗的錯(cuò)誤56.安裝為php擴(kuò)展(可選)67.安裝SphinxSE存儲(chǔ)引擎(可選)6四、Sphinx配置61.mmseg中文分詞詞庫6a)詞典格式6b)詞庫生成方法720/202.創(chuàng)建sphinx數(shù)據(jù)目錄結(jié)構(gòu)73.創(chuàng)建sphinx.conf配置文件74.mmseg.ini分詞配置文件145.建立Sphinx增量索引數(shù)據(jù)表146.書寫常用的s
5、phinx控制命令到sh文件147.創(chuàng)建相應(yīng)的文件結(jié)構(gòu),初始化Sphinx的全部索引178.啟動(dòng)sphinx179.設(shè)置計(jì)劃任務(wù)項(xiàng)1710.設(shè)置開機(jī)啟動(dòng)項(xiàng)17五、通過命令行測試搜索17六、通過phpapi調(diào)用Sphinx搜索18七、通過MySQL的SphinxSE存儲(chǔ)引擎調(diào)用Sphinx搜索(可選)19八、Sphinx數(shù)據(jù)占用量統(tǒng)計(jì)19Sphinx快速介紹Sphinx是獨(dú)立的搜索服務(wù)端,不依賴MySQL,當(dāng)Sphinx和MySQL結(jié)合部署時(shí),Sphinx的數(shù)據(jù)來源為MySQL。服務(wù)器安裝Sphinx,由sphinx.conf配置文件指定Sphinx的數(shù)據(jù)源
6、,如何讀取MySQL的數(shù)據(jù)內(nèi)容,設(shè)置Sphinx對MySQL數(shù)據(jù)庫的哪個(gè)表哪些字段建立索引,索引的返回?cái)?shù)據(jù)必須是數(shù)值型。?例如一個(gè)配置段設(shè)置Sphinx對cdb_threads表的subject和author字段建立索引,搜索結(jié)果可以返回tid和uid。另一個(gè)配置段設(shè)置Sphinx對cdb_posts表的subject和message字段索引,搜索結(jié)果返回tid和pid。Sphinx建立的索引只是查詢MySQL數(shù)據(jù)庫獲取數(shù)據(jù)內(nèi)容,將索引存放在Sphinx的數(shù)據(jù)文件和內(nèi)存中,一般不對MySQL數(shù)據(jù)庫進(jìn)行修改操作。?因?yàn)镾phinx獨(dú)立運(yùn)行,使用SELECT*
7、FROMcdb_threadsWHEREsubjectLIKE'%關(guān)鍵詞%'LIMIT0,10;類似的SQL語句將無法利用Sphinx搜索,即使服務(wù)器端已經(jīng)部署Sphinx也不會(huì)對該查詢語句有任何優(yōu)化作用。?正確使用Sphinx搜索數(shù)據(jù)的操作方式主要有三種:1、命令行的search工具:/usr/local/webserver/sphinx/bin/search–ithreadstest2、php的api接口查詢:原理是直接用fsockopen連接端口,傳遞數(shù)據(jù)取得返回結(jié)果。Sphinx官方已經(jīng)提供php的api接口,可以includeapi查詢(本方案以
8、該查詢方法為主),也可以將其源代碼編譯成php擴(kuò)展而無需inclu