我对搜索有一些特定需求,我有兴趣了解人们对搜索方法最有意义的看法。根据我下面的解释,你会建议我使用基本的SQL查询吗?或者升级到更高级的搜索解决方案,比如Sphinx?
我想要搜索两个模型:产品和品种。
产品has_many :varieties
品种belongs_to :product
我需要我的搜索来识别产品和品种之间的关系。然而,品种在网站上没有自己的存在。因此,当用户搜索系统中的各种类型时,我需要搜索以返回该品种所在的相应产品页面。
例如,假设产品是球,品种是有弹性的。如果用户搜索“bouncy”,我希望搜索返回球/节目视图。
其他调整涉及结果。如果给定搜索只有一个结果,我想渲染产品/显示页面。但是,如果有多个结果,我想渲染产品/索引页面,显示多个结果。我的数据集是一个非常有限的宇宙,所以我认为我们只有一个结果会相当普遍。
这些是我的要求。我可以使用标准的SQL查询和条件满足这些要求吗?或者您会推荐更高级的搜索方法吗?
谢谢!
答案 0 :(得分:4)
这两种解决方案都能满足您的要求,但只有在数据集很小的情况下,您才能使用标准SQL查询来满足它。在这种情况下,搜索到的查询的DB索引很重要。您可以查看我用于小项目的scoped_search并完成工作。
如果你有一个大数据集并且普通的SQL查询会减慢你的速度,那么sphinx(以及thinking-sphinx)就是你的选择。这种方法的唯一缺点是必须监视和维护另一个守护进程,尽管它非常稳定和轻量级。这个解决方案也非常容易实现,并且有一个关于思维 - 狮身人面像的良好社区。 p>
最后,您可以考虑数据库的全文搜索功能。如果您正在使用PostgreSQL,tsearch是一个很好的解决方案,因为它非常快并且内置于您的数据库进程中。有几个用于与之交互的Rails插件:acts-as-tsearch和tsearchable。尝试一下,看看哪个感觉更好。