我需要对我的应用程序拥有的大多数数据进行某种全局搜索。数据分布在不同的表中,如MySQL中的用户,注释等。
我确实想在应用程序中处理这个问题,不是像谷歌自定义搜索那样。
我的想法是创建一个表格,其中包含source id
和data
等列,data
上有全文索引,然后以某种方式将所有数据收集到表格中。
有没有更好的方法来实现这个?最好是宝石还是插件?
答案 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内容的全文可搜索索引。