我正在编写我的第一个Ruby on Rails应用程序,需要实现“搜索”功能。它将需要搜索数据库(3个不同表中每个表1列),并返回3个类别中每个类别中最相关的结果。有点像你可以在Amazon.com上进行搜索,它将返回来自所有不同部门的结果。
我应该知道Ruby on Rails世界中是否有一个gem / library / common技术(适用于Rails 3)?否则,我应该怎么做才能在我的应用程序中实现搜索功能?
答案 0 :(得分:4)
我认为这取决于你对搜索的“严重”程度。
如果您只想搜索一些简单的VARCHAR字段,您可以通过生成一些“LIKE'%xyz%'”语句来手动执行这些字段,那么您所需要的只是一个为您执行此操作的插件。我最喜欢的是searchlogic。它在您的模型中启用了一些方便的动态范围,您可以将它们链接在一起(与其他范围一样)。例如,你可以这样写:
User.last_name_like("Doe").age_gt(30).age_lt(40)
这是关于如何使用其他功能的great screencast。
但SQL LIKE语句并不适合在大块文本中进行搜索。因此,如果这就是您所需要的,那么最好使用实际索引数据的插件。
在这种情况下thinking sphinx(在其他答案中提到)是一个很好的解决方案。请记住,它需要一些特定于平台的安装步骤,并且只适用于PostreSQL和MySQL(它不适用于Rails的默认SQLite)。使用它也不是那么简单 - 您需要定义要搜索的每个模型的索引,构建索引,启动Sphinx等。
答案 1 :(得分:2)
可能你需要使用一些搜索引擎。看看thinking sphinx插件。我也使用了acts_as_ferret,但它可能会导致一些问题。
我不知道是否有一个插件能够满足您的需求。我会这样做:
Google是您的朋友:take a look here和here。