映画モデルと、映画のジャンル ファセットを持つ検索ページがあります。検索ページのすべてのファセットの近くにあるチェックボックスを選択できます。チェックされたファセット用語のリストをコントローラーに渡し、映画コレクションをフィルター処理して、チェックボックスで選択されたジャンルの映画のみを含めたいと考えています。
インデックスと検索定義を使用した私のモデルは次のとおりです。
class Movie < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
indexes :id, :index => :not_analyzed
indexes :title, :analyzer => 'snowball', :boost => 100
indexes :description, :analyzer => 'snowball'
indexes :genres do
indexes :title, analyzer: 'keyword'
end
end
def to_indexed_json
to_json( include: { genres: { only: [:title, :id] } } )
end
def self.search(params={})
tire.search(page: params[:page], per_page: 5, load: false) do
query do
all
#boolean do
# must { string params[:query], :default_field => 'title' }
#end
end
#filter 'genres.title', :values => params[:genres] if params[:genres].present?
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
facet 'global-genres', global: true do
terms 'genres.title', size: 15
end
facet 'scoped-genres' do
terms 'genres.title', size: 15
end
end
end
attr_accessible :description, :title, :year, :genres
has_and_belongs_to_many :genres, :uniq => true
end
この部分をどのように書き直すべきかわかりません:
#filter 'genres.title', :values => params[:genres] if params[:genres].present?
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
#filter 'genres.id', :values => [1, 2, 3]
後で、ジャンルまたはジャンル ID のリストをパラメーターとして渡し、それらをフィルター処理する必要があります。
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
「ジャンル 1」または「ジャンル 2」または「ジャンル 3」を持つ映画にフィルターをかけます。AND ロジックを持つには、これらのジャンルが必要です。
どうすればこれを適切に行うことができますか?