2012-08-04 77 views
0

我想按年龄组筛选搜索。Elasticsearch:按轮胎组进行筛选

现在我有: program.rb

class Program < ActiveRecord::Base 
    has_many :age_groups, through: :programs_age_groups_relations 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 
    mapping do 
    indexes :name, analyzer: 'snowball', boost: 100 
    indexes :description, analyzer: 'snowball' 
    indexes :age_groups do 
     indexes :name, analyzer: 'snowball' 
    end 
    end 

    def to_indexed_json 
    to_json(include: {age_groups: {only: :name}}) 
    end 
    def self.search(params, options={}) 
    tire.search(load: {include: 'age_groups'}) do 
     query do 
     boolean do 
      must { string params[:name_query] } if params[:name_query].present? 
     end 
     end 

    filter do 
     boolean do 
     if params[:age_groups].present? 
      params[:age_groups].each do |ag_name| 
      must { string ag_name } 
      end 
     end 
     end 
    end 
    end 
end 

index.html.haml

= form_tag programs_path, method: :get do |f| 
    = text_field_tag :name_query, params[:name_query] 
    - AgeGroup.all.each do |ag| 
    = check_box_tag 'age_groups[]', ag.name, params[:age_groups].include?(ag.name) 
在控制器

@programs = Program.search(params) 

年龄组:

AgeGroup.create([{name: 'Baby'}, {name: 'Toddler'}, {name: 'Preschoolers'}, {name: 'Elementary'}, {name: 'Middle School'}]) 

维吾尔语:

class ProgramsAgeGroupsRelation < ActiveRecord::Base 
    attr_accessible :age_group_id, :program_id 
    belongs_to :age_group 
    belongs_to :program 
end 

当我检查在搜索表单没有一个或多个age_groups发生了与搜索结果。

如何正确使用轮胎完成此任务?

回答

相关问题