在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开发的服务。这对于中文分词功能的支持来说,就很难实现了,因此不得不遗憾的放 弃。