在Java平台上面,lucene是眾望所歸的全文檢索索引工具,lucene效能不俗,程式穩定,第三方擴充和分 詞演算法眾多,但是在RoR方面,就沒有那麼幸運了,JavaEye網站要做全文檢索索引,怎麼來解決全文檢索索引的問 題呢?
在ruby平台上面,全文檢索索引有三個途徑:
1、solr, acts_as_solr
solr是apache開源組織的一個項目,完全基於lucene的最新版本,在lucene的上層提供了一個基於 HTTP/XML的Web Services。solr的發行包自己綁定了jetty6.0應用伺服器,可以直接啟動,成為一個獨立 的全文檢索索引的web服務。
由於和solr的通訊方式是標準的基於HTTP的XML,所以你可以使用任何程式設計語言,Java,C++,Ruby, Python都不在話下。你通過向solr發送xml查詢請求,讓solr在後台運行lucene,返回結果也被封裝為xml ,當然你也可以讓solr去做索引。基本上solr就是 lucene的一個Web服務的封裝。solr的優勢在於為大規 模的全文檢索索引做了很多緩衝最佳化,由於採用xml,也不限於用戶端的種類。
RoR有一個叫做acts_as_solr的外掛程式,封裝了ruby對solr的訪問,如果你喜歡用solr作為全文檢索索引, acts_as_solr是一個不錯的選擇,他可以很方便的讓你的RoR應用添加全文檢索索引功能,考慮到lucene的穩 定性,這個方案是一個相當不錯的選擇。
但是這個方案的缺點也是顯而易見的,你的RoR應用所有的全文檢索索引都要依賴後台再次向solr伺服器發 送web請求來擷取結果,單個頁面的執行速度肯定會受限於背景跨http的web請求,這對於那些對全文檢 索功能依賴特別多的網站來說,恐怕很難接受。因此JavaEye3.0不採用solr方案。
2、sphinx
http://robbin.javaeye.com/blog/122696
我已經在上一篇部落格當中介紹了sphinx。我個人非常青睞sphinx這種獨立的第三方全文檢索索引伺服器, 而且能夠和MySQL結合的很好,更不用說其優異的效能了。但是sphinx的缺點在於沒有很好的分詞擴充的 介面,它是一個純C開發的服務。這對於中文分詞功能的支援來說,就很難實現了,因此不得不遺憾的放 棄。