http://lutaf.com/158.htmjava
搜索引擎程序這個名稱不穩當,嚴格說來應該叫作索引程序(indexing program),早期主要用來作中文全文搜索,可是隨着互聯網的深刻普及,各家網站規模愈來愈大,索引程序在 優化網站架構上發揮了更大的做用:替代MySQL數據庫內置的索引mysql
Lucene出自名門,子孫興旺,並且它的兄弟Hadoop風頭正盛,因此名氣最大,而sphinx由於簡單可靠,代碼結構優良,性能很是好,在國內大型網站中使用最廣.xapian用戶太少,不建議使用c++
技術選型要選人最多的方向,不可標新立異程序員
sphinx 平均搜索時間:20ms,如此之快,是由於sphinx的基本上能夠算做靜態索引。web
client API只能update已經存入的document屬性,不能添加新文檔。sql
加入新文檔只有經過 build/merge的方式,磁盤IO開銷很大,從這個角度,sphinx不適合內容更新頻繁的網站,不適合作實時索引。但現實狀況是國內強UGC的網站基本上都採用sphinx,好比新浪微博,搜狐微博,趕集網,discuz等數據庫
這對程序員來講是巨大的挑戰:只能經過創建多級索引,或者採用sphinx+solr的混合方案apache
Lucene 就是一個純粹的索引程序代碼包,使用的時候,你得寫一個簡單的server程序(接受關鍵詞-經過lucence查詢-返回結果),而後配置在應用服務器中(tomcat/Resin),通常來講,這個server程序會採用http協議,或者xml-rpc,直接用tcp那也太無聊了api
Solr 有大俠急公好義,幫你把上文提到的web 程序寫好了,你只須要配置部署就可用,這就是solr,solr對外的接口是http協議,也支持分佈式索引tomcat
Elasticsearch,新項目,最近很紅,其實也是Lucene的馬甲,有以下特色
elasticsearch 從設計思路上是針對 Amazon CloudSearch,它的關鍵詞是
這幾點一看就是高富巨,日uv幾百萬的網站,索引也只有幾十G,普通玩家是用不着的
可是從緊跟前沿技術的角度,若是你的索引服務器超過3臺,能夠嘗試部署elasticsearch,性能如今是差點,但硬件和時間會幫你搞定一切