在Ruby on Rails 3应用程序中实现搜索?

时间:2010-01-31 18:20:37

标签: ruby-on-rails search

我正在编写我的第一个Ruby on Rails应用程序,需要实现“搜索”功能。它将需要搜索数据库(3个不同表中每个表1列),并返回3个类别中每个类别中最相关的结果。有点像你可以在Amazon.com上进行搜索,它将返回来自所有不同部门的结果。

我应该知道Ruby on Rails世界中是否有一个gem / library / common技术(适用于Rails 3)?否则,我应该怎么做才能在我的应用程序中实现搜索功能?

2 个答案:

答案 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,但它可能会导致一些问题。

我不知道是否有一个插件能够满足您的需求。我会这样做:

  1. 实施搜索(使用sql或某些搜索引擎,如Sphinx等)
  2. 然后添加一些ajax用于自动完成。
  3. Google是您的朋友:take a look herehere