? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sphinx
(1)Sphinx簡介
Sphinx是一個基于SQL的全文檢索引擎,可以結(jié)合MySQL,PostgreSQL做全文搜索,它可以提供比數(shù)據(jù)庫本身更專業(yè)的搜索功能,使得應(yīng)用程序更容易實現(xiàn)專業(yè)化的全文檢索。Sphinx特別為一些腳本語言設(shè)計搜索API接口,如PHP,Python,Perl,Ruby等,同時為MySQL也設(shè)計了一個存儲引擎插件。
Sphinx單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級)。Sphinx創(chuàng)建索引的速度為:創(chuàng)建100萬條記錄的索引只需3~4分鐘,創(chuàng)建1000萬條記錄的索引可以在50分鐘內(nèi)完成,而只包含最新10萬條記錄的增量索引,重建一次只需幾十秒。
(2)Sphinx工作流程圖:

(3)流程圖解釋:
Database:數(shù)據(jù)源,是Sphinx做索引的數(shù)據(jù)來源。因為Sphinx是無關(guān)存儲引擎、數(shù)據(jù)庫的,所以數(shù)據(jù)源可以是MySQL、PostgreSQL、XML等數(shù)據(jù)。
Indexer:索引程序,從數(shù)據(jù)源中獲取數(shù)據(jù),并將數(shù)據(jù)生成全文索引??梢愿鶕?jù)需求,定期運行Indexer達(dá)到定時更新索引的需求。
Searchd:Searchd直接與客戶端程序進(jìn)行對話,并使用Indexer程序構(gòu)建好的索引來快速地處理搜索查詢。
APP:客戶端程序。接收來自用戶輸入的搜索字符串,發(fā)送查詢給Searchd程序并顯示返回結(jié)果。
(4)Sphinx原理:
Sphinx的整個工作流程就是Indexer程序到數(shù)據(jù)庫里面提取數(shù)據(jù),對數(shù)據(jù)進(jìn)行分詞,然后根據(jù)生成的分詞生成單個或多個索引,并將它們傳遞給searchd程序。然后客戶端可以通過API調(diào)用進(jìn)行搜索。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CoreSeek
(1)CoreSeek簡介
Coreseek 的開發(fā)工作類似Sphinx(起始于2001年),可以上溯到2006年,當(dāng)時試圖為一個數(shù)據(jù)庫驅(qū)動的網(wǎng)站尋找一個可接受的中文搜索的解決方案,但是當(dāng)時沒有任何方案能夠完全而又直接的滿足要求。事實上,主要是如下問題:
---搜索質(zhì)量(例如:類似Google的有效的相關(guān)度算法) 單純的統(tǒng)計學(xué)方法的效果非常糟糕,特別是在大量的短篇文檔的集合上,例如:論壇、博客等等
---搜索速度 特別是當(dāng)搜索的短語包括"停止詞"時,表現(xiàn)的尤其明顯,例如:"to be or not to be"
---建立索引時,可控的磁盤和CPU消耗 在現(xiàn)有硬件的環(huán)境下,這一點的重要性要超過對索引構(gòu)造速度的要求。
---中文搜索的準(zhǔn)確性和效率 因為眾所周知的原因,只有準(zhǔn)確的中文分詞才能提高中文搜索的準(zhǔn)確性,并大大降低計算量。
(2)CoreSeek原理
Coreseek為應(yīng)用提供全文檢索功能,目前的版本(2.x 3.x)基于Sphinx,支持使用Python定義數(shù)據(jù)源,支持中文分詞。coreseek集合了sphinx的功能,支持更多的數(shù)據(jù)源,在字典,建立索引,分詞更好的支持中文??梢赃@樣理解,coreseek就是支持中文的sphinx全文檢索