0

いくつかの異なるフィールドでフィルター処理する可能性のあるアプリケーション検索を行っていますが、その一部はすべてのインデックスに存在しません。

現時点では、複雑な 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>] 

ユーザーが除外された場合、それは本当に良いことです。

4

1 に答える 1

0

パラメータで検索するクラスを渡すことができます。

しかし、あなたのやり方もうまくいくはずです。

私のため

ThinkingSphinx.search(conditions: { type: "text" })

エラーを書き込むだけです

Sphinx Daemon が警告を返しました: インデックス bulletin_core,bulletin_delta,user_delta ...: クエリ エラー: フィールド 'type' がスキーマに見つかりません

しかし、クラッシュしません。インデックス付きフィールドを持つクラスのインスタンスのみを返しますtype

ここに書かれている方法を試すこともできますhttps://groups.google.com/forum/?fromgroups=#!topic/thinking-sphinx/rrAPXtxUMjgしかし、私はまだ試していません

于 2012-11-22T12:18:49.910 に答える