在Rails中的不同表中搜索许多不同的列

时间:2010-01-08 23:05:04

标签: mysql ruby-on-rails search full-text-search

我需要对我的应用程序拥有的大多数数据进行某种全局搜索。数据分布在不同的表中,如MySQL中的用户,注释等。

我确实想在应用程序中处理这个问题,不是像谷歌自定义搜索那样。

我的想法是创建一个表格,其中包含source iddata等列,data上有全文索引,然后以某种方式将所有数据收集到表格中。

有没有更好的方法来实现这个?最好是宝石还是插件?

3 个答案:

答案 0 :(得分:3)

我建议调查Thinking Sphinx gem,它是Sphinx全文搜索引擎的Ruby接口。

答案 1 :(得分:2)

我之前使用acts_as_solr(http://acts-as-solr.rubyforge.org/)在Rails项目中的各种模型中添加文本搜索。您只需标记您对索引感兴趣的模型和属性,然后插件处理其余部分。

答案 2 :(得分:0)

当遇到这样的问题时,我开始利用MySQL的全文搜索功能。你可以做的就是将你所有的“可搜索”内容都塞进一个专门用来编译的MyISAM表中。

由于维护依赖于特定于搜索的记录是一件痛苦的事情,特别是对于Rails,更容易添加处理后端复制的触发器,而不是像after_save或after_destroy类型的调用那样。

虽然这不是gem或插件,并且引入触发器会完全混淆Rails架构转储器,强制切换到.sql格式而不是.rb,但它的工作效果非常好。大多数情况下它只是“有效”,因此您不必过于担心它,尽管改变您的架构可能需要不时重建您的触发器。

触发器概念非常简单,与ActiveRecord回调不同:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

这是对Mediawiki软件采用的技术的改进,通常在InnoDB中提供存储的wiki内容的全文可搜索索引。