いくつかの異なるフィールドでフィルター処理する可能性のあるアプリケーション検索を行っていますが、その一部はすべてのインデックスに存在しません。
現時点では、複雑な if elsif elsif を使用して、コントローラーで検索する正しいクラスを整理しています。
現在発生しているように見える条件を無視するのではなく、条件フィールドが存在しない場合にモデルを自動的に検索しないようにスフィンクスを考える方法はありますか。
例えば
ThinkingSphinx.search(@query, :conditions => {:genres =>"classical-music"}, :match_mode => :extended, :classes => [Performer, Promoter, Tour, Venue, User], :order => :name_sort, :sort_mode => :asc)
ユーザーにジャンルはありませんが、検索結果に含まれています
アップデート
思い通りにいかないのは確かです。私のユーザー モデルには、インデックスにジャンル フィールドがないため、ジャンルで検索するときに除外したいと考えています。
検索例
User.search("anne")
Sphinx Query (3.6ms) anne
Sphinx Found 1 result
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (80)
=> [#<User id: 80, first_name: "Anne", last_name: "Bowers", bio: nil, email: "anne@bowers.com", phone: nil, created_at: "2012-11-20 09:36:05", updated_at: "2012-11-20 09:36:05", role: nil, promoter_id: nil, performer_id: nil, job_title: nil>]
ThinkingSphinx.search("anne", :conditions => {:genres => "music"}, :match_mode => :extended, :classes => [User], :order => :name_sort, :sort_mode => :asc)
Sphinx Query (3.2ms) anne @genres music
Sphinx Found 1 result
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (80)
=> [#<User id: 80, first_name: "Anne", last_name: "Bowers", bio: nil, email: "anne@bowers.com", phone: nil, created_at: "2012-11-20 09:36:05", updated_at: "2012-11-20 09:36:05", role: nil, promoter_id: nil, performer_id: nil, job_title: nil>]
ユーザーが除外された場合、それは本当に良いことです。