`

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

    博客分类:
  • ROR
阅读更多

  经过三四天的折腾,我终于完成了一个有基本功能的全文搜索,这一段时间的目标就是要做全文搜索,想实现的功能像: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
分享到:
评论
5 楼 playcase 2008-10-05  
楼上不妨试试ultrasphinx, 跟will_paginate有完美整合。
4 楼 yangzhihuan 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。

期待你的回复


3 楼 yangzhihuan 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这个全局变量。
期待你的回复。
2 楼 playcase 2008-10-04  
我用的是sphinx + ultrasphinx, 速度效果都不错。就是文档有点少,很多东西都是自己试出来的。呵呵
1 楼 yangzhihuan 2008-10-04  
下了你的例子看。rubin推荐了一个rmmseg的C++库,据说性能更好,不知你看了没有,附上地址 http://robbin.iteye.com/blog/197263

相关推荐

    Ruby搜索引擎Ferret.zip

    Ferret 是 Java 全文搜索引擎 Lucene 的 Ruby 移植版本。 标签:Ferret

    E022-渗透测试常用工具-使用ferret进行Cookie劫持.pdf

    E022-渗透测试常用工具-使用ferret进行Cookie劫持

    Ferret ruby下的搜索引擎技术

    ruby下的搜索引擎。With the introduction of Ferret, Ruby users now have one of the fastest and most flexible search libraries available. And it's surprisingly easy to use.

    ferret 6.84 for win7 64

    FERRET 绘图软件 6.84 for win64 安装方式,解压到任意目录,直接执行bin\bash.exe或bin\mintty.exe原方式操作,直接执行bin\ferret_v6.84.exe 直接进入FERRET

    ferret简明手册

    这是一个关于ferret的画图软件的简明手册,上传上来希望对学习ferret的有所帮助

    Ferret工具源代码

    几年前的黑帽子大会后传出的一个工具Ferret。作者声称可以利用他截获邮箱登录过程中的cookie信息。进而可以随意侵入他人的信箱。曾在黑帽子大会上当场演示如何破解gmail,hotmail等信箱。终于等到作者把代码和工具都...

    工具Ferret(含代码)

    黑帽子大会上传出的一个工具Ferret.作者声称可以利用它截获邮箱登录过程中的cookie信息。仅供研究勿非法用途......

    Go-Ferret一种声明式Web爬虫系统

    一种声明式Web爬虫系统,旨在简化网络上的数据提取,例如ui测试,机器学习和分析。

    Ferret 是用于实时嵌入式控制系统的免费软件 lisp 实现_Makefile_代码_相关文件_下载

    Ferret 是一个免费软件 lisp 实现,旨在用于实时嵌入式控制系统。Ferret lisp 编译成自包含的C++11。生成的代码可在支持C++11兼容编译器的任何操作系统和/或微控制器之间移植。它已经过验证,可以在从内存低至2KB 的...

    Arduino-ferret.zip

    Arduino-ferret.zip,ferret是一个用于实时嵌入式控制系统的自由软件lisp实现。,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,深受电子制造商的欢迎,Arduino通过开源系统提供了很多灵活性。

    Ferret-crx插件

    语言:English 在多功能框中输入“#”和一个搜索词,以在新标签页中打开搜索。 雪貂为您的所有应用带来了一个惊人的搜索界面。

    Image Ferret-开源

    在互联网上搜索和搜索各种图像,照片和艺术品。 自动了解您喜欢的图像。

    find:数组查找实用程序

    直接从使用安装 npm install jeromedecoster/find 从文件安装 { " dependencies " : { " find " : " jeromedecoster/find " } } 原料药 find(array,fn,[options]) 查找功能 var users = [ { name : 'Tobi' ...

    find:返回数组中的第一个匹配值

    查找(数组,字符串) 使用属性字符串查找: find ( users , 'admin' ) ;查找(数组,对象) 使用对象值匹配查找: var users = [ ] ;users . push ( { name : 'Tobi' , age : 2 , species : 'ferret' } ) ;users . ...

    雪貂::rat:增强了Vim的多文件搜索

    存在对将选项传递到基础搜索命令的支持,以及使用完整正则表达式语法而不进行特殊转义的功能。 在现代版本的Vim(版本8或更高版本,或Neovim)上,搜索是异步执行的(不阻塞UI)。 提供了快捷方式映射以启动搜索...

    基于Rails的菲普斯网站管理系统 v0.8.5.rar

    软件介绍 Fepss(菲普斯)第一个推出在线为企业提供不限用户...本网站系统是作为OA系统的前端展示系统,所倚赖的包都在plugin目录,其中还提供了一个基于ferret的全文检索功能,需要通过 gem install ferret 方式安装。

    Ferret.Net-开源

    Ferret.Net 是一个基于接口的类库,它封装了不同操作系统(目前是 Win32 和 Linux)的网络套接字库。

    Ferret CMS-开源

    Ferret CMS是基于Zope的内容管理系统。 它专注于网站的轻松管理和快速部署。 它具有一种工作流机制,该机制具有可以分配给后端用户的角色。

    contentful-ferret:内容丰富的项目的盖茨比入门者

    使用Contentful和Gatsby,您可以将自己喜欢的静态站点生成器与API相连,该API为人们编写内容提供了易于使用的界面,并使用或等服务使发布自动化。特征简单的内容模型和结构。 易于调整以适应您的需求。 使用我们的...

    querystring:简单键值对查询字符串解析器

    // => { name: 'tobi', species: 'ferret' } .stringify(对象) 字符串化给定的object : var query = require ( 'querystring' ) ; query . stringify ( { name : 'tobi' , species : 'ferret' } ) ; // => ...

Global site tag (gtag.js) - Google Analytics