Thinking Sphinx搜索中关联的“IS NOT NULL”条件

时间:2016-10-06 10:21:04

标签: ruby-on-rails ruby full-text-search sphinx thinking-sphinx

如何在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

..我们希望搜索包含特定关键字并拥有图片的所有文章。文章和图片通过简单的has_many关系

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

以下行曾用过工作,如here所述,但它似乎不再起作用了: - (

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

这样做的正确方法是什么?我正在使用Sphinx 2.2.10thinking-sphinx 3.2.0

1 个答案:

答案 0 :(得分:2)

您可以使用SQL代码段添加其他属性:

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