搜索Gems for Rails

时间:2014-07-19 05:27:31

标签: ruby-on-rails ruby

我正在浏览reddit以获得答案,并遇到了this conversation,其中列出了一堆用于rails的搜索宝石,这很酷。但我想要的是我能做到的事情:

  • 输入: OMG Happy Cats

    • 它搜索整个数据库,查找有 OMG Happy Cats 的任何内容,并返回一个包含该值的模型对象数组,然后我可以使用Active模型序列化程序(< strong>非常重要的是能够使用此)来返回搜索结果的json对象,以便您可以向用户显示您想要的内容。

      因此,如果json对象是博客,则会有一个帖子对象,可能是一个类别对象甚至一个评论对象。

我所看到的一切都非常特定于一个控制器,一个模型。哪一个很好,但我更多的是“寻找你想要的东西,我们会回报你想要的东西,也许像this gem, searchkick更聪明,它也有提供拼写建议的能力。”

我正在使用API​​构建它,因此它将仅限于属于博客对象的所有内容(以使其不那么大的搜索),因此它会搜索帖子,标签,类别,评论等内容和页面寻找你的术语,返回一个json对象(如上所述)和繁荣完成。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你最好考虑这个

的基础技术

-

第三方

据我所知(我在这方面不是很有经验),搜索整个 Rails数据库的最佳方法是使用第三方系统来“索引”各种元素您需要的数据,允许您根据需要进行搜索。

这方面的一些例子包括:

基本上,拥有这些“第三方”搜索系统之一,您可以在单独的数据库中index {\ t}}所需的各种记录,然后您可以使用您的应用程序进行搜索。

-

备注

使用第三方堆栈处理“搜索”有几个好处。

首先,它会降低主Web服务器的负载 - 这意味着它将更加可靠和安全。能够处理更多流量。

其次,它将确保您能够搜索所有应用程序的数据,而不是绑定到特定的模型/数据集

第三,因为许多这些第三方解决方案index您正在寻找的内容,它将为您的实际应用释放您的数据库连接,使其更高效和更高效。可扩展

答案 1 :(得分:1)

对于PostgreSQL,您应该可以使用pg_search。 我自己从未使用它,但是通过GitHub上的文档,它应该允许你这样做:

documents = PgSearch.multisearch('OMG Happy Cats').to_a
objects = documents.map(&:searchable)
groups = objects.group_by{|o| o.class.name.pluralize.downcase}
json = Hash[groups.map{|k,v| [k,ActiveModel::ArraySerializer.new(v).as_json]}].as_json
puts json.to_json