论坛首页 编程语言技术论坛

备忘:使用RMMSeg+Ferret完成全文搜索

浏览 4057 次
精华帖 (0) :: 良好帖 (8) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-25  

  经过三四天的折腾,我终于完成了一个有基本功能的全文搜索,这一段时间的目标就是要做全文搜索,想实现的功能像:www.1718zx.cn ,这是我的一个网站,使用compass来完成的,本人在对RUBY语法不是很清楚的情况下开始上手的.

  呵呵,操作步骤:

  1),gem install几个东东:

               gem install ferret

               gem install acts_as_ferret

               gem install rmmseg

               到此为止,所有安装步骤已经完成,不需要再下载什么软件.

  2),创建rails项目,其中我有一个表:productinfos,在下文当中所有Productinfo.对象均是本表当中的字段.使用脚手架:ruby script/generate scaffold Productinfo Search完成一些功能.

  3),在MODEL当中加入Ferret,请参考附件代码

      4),加入分页,请参考附件代码

  5),调整页面,请参考附件代码

  6),为了显示中文,加入过滤器,请参考附件代码

     说明,做为一个菜鸟一下子飞到RAILS世界,真的有点傻眼,代码说明一些,参考文章对于我来说简直是在折磨我的毅力,好歹也算做出点东西来.

      参考一下结果图:

使用ferret完成的搜索结果

 

  • productinfo.rb.rar (839 Bytes)
  • 描述: 静态模型,加入了ferret索引
  • 下载次数: 132
  • application.rb.rar (565 Bytes)
  • 描述: 主程序,加入了编码过滤功能
  • 下载次数: 119
   发表时间:2008-10-04  
下了你的例子看。rubin推荐了一个rmmseg的C++库,据说性能更好,不知你看了没有,附上地址 http://robbin.iteye.com/blog/197263
0 请登录后投票
   发表时间:2008-10-04  
我用的是sphinx + ultrasphinx, 速度效果都不错。就是文档有点少,很多东西都是自己试出来的。呵呵
0 请登录后投票
   发表时间:2008-10-05  
我想请问一下在ProductInfo.rb里面的这两句:
analyzer = RMMSeg::Ferret::Analyzer.new { |tokenizer|
    Ferret::Analysis::LowerCaseFilter.new(tokenizer)
  } 
  $index = Ferret::Index::Index.new(:analyzer => analyzer)

有什么用处呢?在ProductInfo.rb整个文件里都没有用到$index这个全局变量。
期待你的回复。
0 请登录后投票
   发表时间:2008-10-05  
在SearchController里面调用的pages_for方法:
def search 
    #s = Ferret::Search::SortField.new(:productname_for_sort, :reverse => false)
    @query =params[:query]  
    @total, @members = Productinfo.full_text_search(@query, :page => (params[:page]||1))  
    @pages = pages_for(@total)
end

它是调用applications.rb里面的pages_for方法:
 
def pages_for(size, options = {})  
    default_options = {:per_page => 10}  
    options = default_options.merge options  
    pages = Paginator.new self, size, options[:per_page], (params[:page]||1)  
    return pages  
  end

我对这一句:
pages = Paginator.new self, size, options[:per_page], (params[:page]||1)  

不甚明了,实在想不出,它如何对@members进行公页,这里的self,我的理解是表示的是当前的controller。

期待你的回复


0 请登录后投票
   发表时间:2008-10-05  
楼上不妨试试ultrasphinx, 跟will_paginate有完美整合。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics