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

http://lutaf.com/158.htmjava

 

 

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

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

 

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

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

使用情況

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

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

搜索性能

  • elasticsearch有數聽說是200ms
  • solr 我目前手上沒有數據,應該比sphinx慢
  • sphinx 平均搜索時間:20ms,如此之快,是由於sphinx的基本上能夠算做靜態索引web

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

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

    這對程序員來講是巨大的挑戰:只能經過創建多級索引,或者採用sphinx+solr的混合方案apache

Lucene系

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

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

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

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

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

  • 分佈式
  • 實時
  • 高可用

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

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

相關文章
相關標籤/搜索