開源搜索引擎評估:lucene sphinx elasticsearch


http://lutaf.com/158.htm

 

 

開源搜索引擎程序有3大類

  • lucene系,java開發,包括solrelasticsearch
  • sphinx,c++開發,簡單高性能
  • Xapian,c++開發

 

搜索引擎程序這個名稱不妥當,嚴格說來應該叫做索引程序(indexing program),早期主要用來做中文全文搜索,但是隨着互聯網的深入普及,各家網站規模越來越大,索引程序在 優化網站架構上發揮了更大的作用:替代MySQL數據庫內置的索引

  1. 讓mysql no sql化,只承擔數據持久化存儲的功能
  2. 消除join查詢/子查詢,提高數據庫的並發處理能力

使用狀況

Lucene出自名門,子孫興旺,而且它的兄弟Hadoop風頭正盛,所以名氣最大,而sphinx因為簡單可靠,代碼結構優良,性能非常好,在國內大型網站中使用最廣.xapian用戶太少,不建議使用

技術選型要選人最多的方向,不可標新立異

搜索性能

  • elasticsearch有數據說是200ms
  • solr 我目前手上沒有數據,應該比sphinx慢
  • sphinx 平均搜索時間:20ms,如此之快,是因為sphinx的基本上可以算作靜態索引

    client API只能update已經存入的document屬性,不能添加新文檔。

    加入新文檔只有通過 build/merge的方式,磁盤IO開銷很大,從這個角度,sphinx不適合內容更新頻繁的網站,不適合做實時索引。但現實情況是國內強UGC的網站基本上都采用sphinx,比如新浪微博,搜狐微博,趕集網,discuz等

    這對程序員來說是巨大的挑戰:只能通過建立多級索引,或者采用sphinx+solr的混合方案

Lucene系

  • Lucene 就是一個純粹的索引程序代碼包,使用的時候,你得寫一個簡單的server程序(接受關鍵詞-通過lucence查詢-返回結果),然后配置在應用服務器中(tomcat/Resin),一般來說,這個server程序會采用http協議,或者xml-rpc,直接用tcp那也太無聊了

  • Solr 有大俠急公好義,幫你把上文提到的web 程序寫好了,你只需要配置部署就可用,這就是solr,solr對外的接口是http協議,也支持分布式索引

  • Elasticsearch,新項目,最近很紅,其實也是Lucene的馬甲,有如下特點

    1. restful接口
    2. 分布式導向,包括分布式搜索,分布式索引,零配置,自動分片,索引自動負載
    3. 針對實時搜索專門優化:先把索引放在內存中,定期同步到硬盤
    4. 附帶web 圖形化管理工具

elasticsearch 從設計思路上是針對 Amazon CloudSearch,它的關鍵詞是

  • 分布式
  • 實時
  • 高可用

這幾點一看就是高富巨,日uv幾百萬的網站,索引也只有幾十G,普通玩家是用不着的

但是從緊跟前沿技術的角度,如果你的索引服務器超過3台,可以嘗試部署elasticsearch,性能現在是差點,但硬件和時間會幫你搞定一切


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM