在rails 4中实现通用搜索

时间:2015-03-11 05:40:53

标签: ruby-on-rails ruby search global

我有一个带有多个模型和视图页面的rails 4应用程序。我的应用程序的应用程序布局包含一个搜索栏。但截至目前,它仍处于非活动状态。搜索栏的目的是允许用户在所有模型中搜索输入的关键字,基本上使其成为全局搜索。是否有任何宝石进行普遍搜索?或者它必须通过SQL查询手动完成? 我可以看到在其视图页面上实现搜索特定模型的方法。但我希望它能够立即搜索所有模型。我应该怎么做呢?

3 个答案:

答案 0 :(得分:5)

我认为在您的情况下最好的方法是使用ElasticSearch。提供了一个整洁的集成宝石here。该页面提供了文档链接。

答案 1 :(得分:3)

Sunspot是在Rails应用中添加搜索最常用的gem之一。

索引看起来像这样:

class Post < ActiveRecord::Base
  searchable do
    text :title, :body
    text :comments do
      comments.map { |comment| comment.body }
    end
    integer :blog_id
    integer :author_id
    integer :category_ids, :multiple => true
    time :published_at
    string :sort_title do
      title.downcase.gsub(/^(an?|the)\b/, '')
    end
  end
end

搜索:

Post.search do
  fulltext 'best pizza'
  with :blog_id, 1
  with(:published_at).less_than Time.now
  order_by :published_at, :desc
  paginate :page => 2, :per_page => 15
  facet :category_ids, :author_id
end

答案 2 :(得分:3)

其中一个好方法是使用gem 'searchkick' 它使用elasticsearch。

Searchkick的资源: https://github.com/ankane/searchkick https://github.com/ankane/searchkick#advanced