Условия "IS NOT NULL" для ассоциаций в поиске Thinking Sphinx

Как добавить условие "НЕ НУЛЬ" для ассоциаций в поиске Thinking Sphinx? Например, если у нас есть модель статьи со следующим индексом:

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' }

Следующая строка работала, как описано здесь, но, похоже, больше не работает:-(

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

Как правильно это сделать? Я использую сфинкса 2.2.10 и думающий сфинкс 3.2.0

1 ответ

Решение

Вы можете добавить дополнительный атрибут с фрагментом 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
Другие вопросы по тегам