JavaEye3.0开发手记之四 - ruby的全文检索

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

时间: 2024-12-01 01:35:01

JavaEye3.0开发手记之四 - ruby的全文检索的相关文章

JavaEye3.0开发手记之二 - rails的UTF-8支持造成的正则表达式问题

rails的ActionView::Helpers::TextHepler模块提供了很多实用的方法,这些方法对于论坛类应用非 常有用,例如 auto_link这个方法可以自动检测传入字符串当中的URL,并将其自动转换为HTML超链接格 式,这对于显示帖子的内容来说很不错. 但是在开发JavaEye3.0的时候,却发现auto_link有bug,一旦帖子当中的URL后面紧跟中文的话, auto_link就会把URL后面所有的中文当做URL的一部分进行格式化,直到碰到空格为止,例如: 引用 http

JavaEye3.0开发手记之三 - 狮身人面

Sphinx的含义是"狮身人面像",是古埃及的金字塔建筑,传说Sphinx是有翼的狮身女怪,她常叫过 路行人猜谜, 猜不出者即遭杀害. 但是我这里说的Sphinx是一个高性能的搜索引擎: http://www.sphinxsearch.com/ Sphinx是一个俄国人开发的搜索引擎,它的主要特点是: 一.性能非常出色 150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟.ferret也望尘莫及,更不 要说lucene了. 二.和数据库集成性很好 Sphinx通

JavaEye3.0开发手记之一

第一步就是搭建一个趁手的开发环境.我没有MacBook电脑,只有一台三年前买的IBM T40,跑MacOSX 很勉强,还是在WindowsXP上面做开发吧.既然在WindowsXP上面开发,那IDE选什么呢?我选netbeans Ruby IDE: 一. RoR IDE http://deadlock.netbeans.org/hudson/job/ruby/ 你可以从这个地方下载Ruby IDE专用版本的netbeans,只有30MB大小,速度比RadRails还快! netbeans的RoR

Nodejs开发框架Express3.0开发手记–从零开始

转载请注明出处:http://blog.fens.me/nodejs-express3/ 程序代码已经上传到github有需要的同学,自行下载.https://github.com/bsspirit/nodejs-demo 从零开始nodejs系列文章 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的 Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都

开心网辅助程序开发手记

声明:本人只在业余空闲时间写写<开心网辅助程序>,目的只是学习! 由于之前有写过类似的程序,也写过相关的文章介绍过(C#网站登录学习笔记(一):登录简单网站.C#网站登录学习笔记(二):访问需登录后才能访问的页面),这次写起"开心网辅助程序"也可以算是得心应手了,直接从电脑中翻出尘封已久的HttpHelper(前面提到的两篇文章就是居于这个操作类进行的),稍微分析了一下网页结构(争车位),就写起程序来了! 在开始写手记前,让我们看看写这样的"外挂"程序需

asp.net2.0开发遇到的小问题解决方法

asp.net|解决|问题 asp.net2.0开发遇到的小问题解决方法一.页面比较长,如果页面提交到服务器时保存滚动条的位置,可以使用下面的两种方式:1.Page.MaintainScrollPositionOnPostback当网页回发到服务器时,用户将返回到该页的页首.在较长的网页中,这意味着用户必须将页滚动到该页的上一位置.当 MaintainScrollPositionOnPostback 属性设置为 true 时,用户将返回到该页的上一位置.2. Page.SmartNavigati

如何在Delphi中调用VC6.0开发的COM

上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过.但是调用就会出现问题,(在VC下调用也是一样的出现).但是用Delphi写的接口程序编译后,不管是在VC下还是在Delphi下调用都没有问题.后来我把VC开发的接口程序编译后,拷贝到其它机子上试,怪事,完全没有问题了.总结后才知道是我机子有点问题.我到现在还没有解决为什么在我的机子上不行,在其它机子

开心网辅助程序开发手记(三):实现停车功能

在前面的两篇手记中,较为详细的介绍了如何借助工具对网页进行分析及如何编写代码实现一些简单的功能.如果还有后续手记,笔者将只简单记录<开心网辅助程序>开发过程中碰都的主要问题及解决方法. 在这篇手记中,笔者将简单描述如何实现简单的停车功能,并且制作一个简单的界面用于呈现系列手记的开发成果. 一.识别好友私家车位中的免费车位:把车停到免费车位中可是会分文无收到,所以千万不能把车停到免费车位上了. 通过Firebug调试发现,当玩家点击"争车位"中部Flash中的停车按钮时,pa

开心网辅助程序开发手记(二):获取好友私家车位信息

在上篇手记<开心网辅助程序开发手记>中,简单记录了如何登录开心网,获取"争车位"的相关数据:玩家(泊车者)信息.玩家车辆停车信息.玩家私家车位停车情况等.在这篇手记中,将简单描述如和获取玩家好友信息及玩家私家车位停车情况.话不多说,进入正文. 一.获取玩家好友信息 其实在上篇手记中,有提到v_frienddata变量,其实玩家好友信息就是以JSON格式保存在该变量里的,我们只需要写好对应的实体,再利用Json.NET做个转换就可以了.由于上篇没有详细介绍如何使用Json.N