Условия "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