Rails - 我应该使用什么进行搜索?

时间:2009-09-24 02:54:24

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

我对搜索有一些特定需求,我有兴趣了解人们对搜索方法最有意义的看法。根据我下面的解释,你会建议我使用基本的SQL查询吗?或者升级到更高级的搜索解决方案,比如Sphinx?

我想要搜索两个模型:产品和品种。

产品has_many :varieties
品种belongs_to :product

我需要我的搜索来识别产品和品种之间的关系。然而,品种在网站上没有自己的存在。因此,当用户搜索系统中的各种类型时,我需要搜索以返回该品种所在的相应产品页面。

例如,假设产品是球,品种是有弹性的。如果用户搜索“bouncy”,我希望搜索返回球/节目视图。

其他调整涉及结果。如果给定搜索只有一个结果,我想渲染产品/显示页面。但是,如果有多个结果,我想渲染产品/索引页面,显示多个结果。我的数据集是一个非常有限的宇宙,所以我认为我们只有一个结果会相当普遍。

这些是我的要求。我可以使用标准的SQL查询和条件满足这些要求吗?或者您会推荐更高级的搜索方法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

这两种解决方案都能满足您的要求,但只有在数据集很小的情况下,您才能使用标准SQL查询来满足它。在这种情况下,搜索到的查询的DB索引很重要。您可以查看我用于小项目的scoped_search并完成工作。

如果你有一个大数据集并且普通的SQL查询会减慢你的速度,那么sphinx(以及thinking-sphinx)就是你的选择。这种方法的唯一缺点是必须监视和维护另一个守护进程,尽管它非常稳定和轻量级。这个解决方案也非常容易实现,并且有一个关于思维 - 狮身人面像的良好社区。

最后,您可以考虑数据库的全文搜索功能。如果您正在使用PostgreSQL,tsearch是一个很好的解决方案,因为它非常快并且内置于您的数据库进程中。有几个用于与之交互的Rails插件:acts-as-tsearchtsearchable。尝试一下,看看哪个感觉更好。