tech.cap

我在一望无际的路上

ruby中文搜索支持的想法

ruby下面中文分词的搜索如何进行?

目前开始考虑这个问题, 目标是使用ferret, ferret是lucene搜索引擎的ruby版本, 凭借一点lucene的经验, 我个人是非常喜欢ferret的, 靠lucene强大的分词,index,search功能, 可以做出很多有趣的功能, 但是ferret有两个难点

  1. 不支持中文分词,而且集成第三方分词对我来说较困难(没有开发c的经验,而且我知道的中文分词算法都是java版本)
  2. 有时候做索引会出错,好象是段地址错误, 因为ferret是在前台index, 所以错误也是在前台fastcig进程中, 感觉很不爽

原来的想法

利用ferret 和lucene兼容的特点, 单独写一个java 类库, 定时对资源做索引,不过后来为了效率(index比lucene快), 新版本的ferret放弃了和lucene兼容, 这个想法是不可行了

更新后的想法

利用mysql中文分词插件,这个东西倒是很好,但是偏偏只支持mysql4.0,和mysql 5.1 beta, 刚好不支持我目前用的mysql5.0.x 由于没有现成版本可以用, 也只好放弃(这个插件只能用来全文搜索, 不像ferret还有其他好玩的功能)

目前的想法:

  1. 在ferret中通过rjb调用 lucene的中文分词然后再index
  2. 需要index的model都增加一个属性indexed,新建或者更新的时候都把indexed设置为false
  3. 把java写好的中外分词通过rjb包装为一个drb service,或者干脆挂在resin上做http页面调用
  4. 在后台,单独的程序定时启动把所有未index的记录select出来(indexed=false), 然后逐一调用第二步开发的进行分词,即是过程中出错, 也不影响前台页面, 这里只改动ferret的ruby代码.
  5. 如果可能, 搜索程序通过远程协议来对keyword分词,然后再搜索

缺点

  1. 这个方案看上去比较恶心.很像一件到处是补丁的衣服, 目前没有时间慢慢去研究ferret中的c代码. 只好通过java来绕圈子

  2. 在后台运行index的话, 就无法实时搜索当前文章, 而是有一个延时, 不过我觉得这个好解决. 另外后台index 就算出错了也不影响前台页面, 大不了有些记录搜索不到而已

  3. 对keyword分词会有速度影响, 不过影响应该很小


posted on 2006-12-10 18:15 tech.cap 阅读(2515) 评论(6)  编辑  收藏 所属分类: tipsruby

Feedback

# re: ruby中文搜索支持的想法 2006-12-11 01:09 Leochen

首先很高兴看到你的留言,以前常在您的blog中找到一些很有用的东西。

我的使用ferret的方式很简单,就只是分完词再给ferret去索引。。虽然觉着恶心。不过至少还可以用吧。。。。
  回复  更多评论   

# re: ruby中文搜索支持的想法 2006-12-11 12:50 dongbin

我也用过Ferret, 我的想法是利用Ferret的ruby层扩展能力,编写ruby语言的中文分词扩展。

理由是:

1.Ruby代码更好维护。
2.安装简易。凡是涉及到Native的ruby库,安装问题多多。

不过现在对分词比较文盲,自己写不出来。  回复  更多评论   

# re: ruby中文搜索支持的想法 2006-12-28 16:10 fred[匿名]

其实现在的ferret支持对utf-8字符的单字分词,在半年之前是不可以的。
因此中文搜索,可以利用单字分词来进行。
实际上lucene的中文检索也只包含2个选择:单字分词和CJK二元分词,后者是chedong提交的,对ferret和ruby比较熟悉可以根据那个cjk分词的源程序来修改ferret
  回复  更多评论   

# re: ruby中文搜索支持的想法 2007-03-16 15:14 aspirin

你提到的“有时候做索引会出错,好象是段地址错误, 因为ferret是在前台index, 所以错误也是在前台fastcig进程中, 感觉很不爽”,是不是有时候用中文搜索的时候,比如 ‘洁面’,它就一直在运行了,象进入了死循环,而且把我的电脑弄得很慢,结果还是出不来,我只有把rails的项目停止掉,有时候又是好的。你们有没有出现我的情况?ruby:1.8.4,rails:1.1.6,ferret:0.11.3
  回复  更多评论   

# re: ruby中文搜索支持的想法 2007-03-16 16:01 cap

我都放弃ferret了, 改为用调用 lucene 中文分词, 用rjb+lucene 索引, 搜索通讯协议用drb 速度还行,  回复  更多评论   

# re: ruby中文搜索支持的想法 2007-03-16 16:46 aspirin

你这样做就是部署麻烦了,不过也是个解决方案@cap
  回复  更多评论   



标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-12-12 12:19 编辑过
 
 
相关链接:
网站导航: