0

Thinking Sphinx検索の関連付けに「IS NOT NULL」条件を追加するにはどうすればよいですか?たとえば、私たちは、次のインデックスを持つ記事のモデルを持っている場合...Thinking Sphinx検索の関連付けに「IS NOT NULL」の条件があります

ThinkingSphinx::Index.define :article, :with => :active_record do 
    indexes subject, :sortable => true 
    indexes content 
    has pictures(:id), as: :picture_ids 
end 

..and我々は、特定のキーワードが含まれているし、絵を持っているすべての記事を検索したいです。記事と写真は、それがhere記載されているように、簡単なhas_many関係

class Article < ActiveRecord::Base 
    has_many :pictures, -> { where 'pictures.type' => 'ArticlePicture' } 

動作するように使用の次の行によって関連していないが、もはや何

Article.search(keyword, without: {picture_ids: 0}) 

:-(動作しているようですしていますそれを行うための正しい方法私はあなたがSQLスニペットを追加属性を追加することができSphinx2.2.10thinking-sphinx3.2.0

+0

ないTSの専門家が、「絵があります(ID)を」ん暗示を関係?つまり、ピクチャIDは別のデータベーステーブルからロードされます。場合によっては2つの問題があると、A)はテーブルの「LEFT JOIN」ではなく「INNER JOIN」を実行してしまいます。そのため、画像のないレコードは単に失われます。しかし、B)もSphinx MVAで終わるならば、写真がないときは、単一​​の0を持つリストではなく空のリストです。 – barryhunter

答えて

2

を使用しています:?

has "COUNT(DISTINCT pictures.id)", :as => :picture_count, :type => :integer 

そして - あなたがrake ts:rebuildを実行したら - 私は仕事に次を期待する:

Article.search(keyword, :without => {:picture_count => 0}) 

それはあなたがまだでpictures協会への参照をする必要がありますことに注意することが重要ですあなたのインデックス定義がSQL結合を確実にするようにします。これは、既存の属性(picture_ids)によって行われ、またはそうでなければ、インデックス定義内の次の行使用して結合を強制することができます

join pictures 
関連する問題