Настройка фасетов в Elasticsearch с помощью Searchkick gem в Rails 4.1

Я хочу, чтобы пользователи могли легко найти серию, поэтому хочу настроить аспекты. Я следовал инструкциям на 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
<%= p @series.facets %>

#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

person thecrentist    schedule 29.04.2014    source источник


Ответы (1)


Наконец-то я заработал, выполнив следующие действия. Не уверен, что это лучший метод, но он работает! Надеюсь, это поможет, и если у вас есть улучшения или предложения, не стесняйтесь, дайте мне знать.

# 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? %>
    <div>
        <ul>
        <% @movies.facets["year"]["terms"].each do |filter| %>
          <li><%= link_to "#{filter["term"]} (#{filter["count"]})", "/movies?year=#{filter["term"]}" %></li>
        <% end %>
        </ul>
    </div>
<% end %>
person thecrentist    schedule 12.05.2014
comment
@crentist, как вы поддерживаете query, если выбран аспект? - person cman77; 19.08.2016