在Rails 4.1中使用Searchkick gem在Elasticsearch中设置Facets

我希望用户能够轻松找到一个系列,所以想要设置方面。 我已按照seachkick的指示进行操作 ,一切正常,但是当我设置Facets时,我得到以下作为返回。 我希望它像在他们的文档中一样。 希望有人能提供帮助。

我在myapp.com/movies中得到了这个

{ "name"=> { "_type"=> "terms", "missing"=> 0, "total"=> 1, "other"=> 0, "terms"=> [ { "term"=> "Bloop", "count"=> 1 } ] }, "imdb"=> { "_type"=> "terms", "missing"=> 0, "total"=> 1, "other"=> 0, "terms"=> [ { "term" => "http://www.bloop.com", "count" => 1 } ] } } 

 #app/views/movies/index.html.erb  

 #app/controllers/movies_controller.rb def index query = params[:query].presence || "*" @movies = Movie.search(query, page: params[:page], suggest: true, per_page: 20, facets: [:name, :imdb]) end 

 #db/schema.rb create_table "movies", force: true do |t| t.string "name" t.text "description" t.string "imdb" t.string "year" t.datetime "created_at" t.datetime "updated_at" end 

我终于通过以下方式实现了它。 不确定它是否是最好的方法,但它的工作原理! 希望它有所帮助,如果您有改进或建议,请随时告诉我。

 # app/models/movie.rb def self.facets_search(params) query = params[:query].presence || "*" conditions = {} conditions[:year] = params[:year] if params[:year].present? movies = Movie.search query, where: conditions, facets: [:year], smart_facets: true, page: params[:page], suggest: true, highlight: true, per_page: 10 movies end 

 # app/controllers/movies_controller.rb def index @movies = Movie.facets_search(params) end 

 # app/views/movies/index.html.erb <% if @movies.facets["year"]["terms"].present? %> 
    <% @movies.facets["year"]["terms"].each do |filter| %>
  • <%= link_to "#{filter["term"]} (#{filter["count"]})", "/movies?year=#{filter["term"]}" %>
  • <% end %>
<% end %>