在 Ruby on Rails 3 应用程序中实现搜索?
Posted
技术标签:
【中文标题】在 Ruby on Rails 3 应用程序中实现搜索?【英文标题】:Implementing search in a Ruby on Rails 3 application? 【发布时间】:2011-01-11 11:31:09 【问题描述】:我正在编写我的第一个 Ruby on Rails 应用程序,需要实现“搜索”功能。它将需要搜索数据库(3 个不同表中的每个表 1 列),并返回 3 个类别中每个类别中最相关的结果。有点像您如何在 Amazon.com 上进行搜索,该搜索将返回来自所有不同部门的结果。
我应该了解 Ruby on Rails 世界中的 gem/library/common 技术(适用于 Rails 3)吗?否则,我应该怎么做才能在我的应用程序中实现搜索功能?
【问题讨论】:
【参考方案1】:我认为这取决于您对搜索的“认真程度”。
如果您只想在一些简单的 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 等。
【讨论】:
【参考方案2】:您可能需要使用一些搜索引擎。看看thinking sphinx 插件。我也使用了acts_as_ferret,但它可能会导致一些问题。
我不知道是否有一个插件可以满足你的所有需求。我会这样做:
-
实现搜索(使用 sql 或 Sphinx 等搜索引擎)
然后添加一些用于自动完成的 ajax 内容。
Google 是您的朋友:take a look here 和 here。
【讨论】:
以上是关于在 Ruby on Rails 3 应用程序中实现搜索?的主要内容,如果未能解决你的问题,请参考以下文章
ruby on rails 6 - 在javascript中动态引用图像
如何使用 Ruby on Rails 发出 HTTP 请求?
如何在没有rails的ruby中实现Application Record