我正在写我的第一个
Ruby on Rails应用程序,需要实现一个“搜索”功能.它将需要搜索数据库(3个不同表格中的每列1列),并在3个类别中的每一个中返回最相关的结果.类似于如何在Amazon.com上进行搜索,将返回所有不同部门的结果.
在Ruby on Rails世界中有没有宝石/图书馆/常见技术,我应该知道(与Rails 3一起使用)?否则,为了在我的应用程序中实现搜索功能,该怎么办?
解决方法
我认为这取决于你对你的搜索有多严重.
如果您只想搜索一些简单的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等.