Исключить черновики статей из индекса Solr с Sunspot - PullRequest
4 голосов
/ 28 апреля 2010

У меня есть индексированная модель под названием Article, и я не хочу, чтобы solr индексировал неопубликованные статьи.

class Article < ActiveRecord::Base
  searchable do
    text :title
    text :body
  end
end

Как я могу указать ту статью, которая не # опубликована? не следует индексировать?

Ответы [ 3 ]

7 голосов
/ 02 августа 2012

Если вы хотите убедиться, что неопубликованные статьи никогда не включены в поисковый индекс, вы можете сделать это следующим образом:

class Article < ActiveRecord::Base
  searchable :if => :published? do
     text :title
     text :body
  end
end

Модель будет проиндексирована только после публикации.

Мой подход менее интересен, если вы также хотите, чтобы администраторы могли искать статьи, в том числе неопубликованные.

Примечание: вызов article.index! добавит экземпляр в индекс независимо от параметра :if => :method.

7 голосов
/ 28 апреля 2010

Обязательно индексируйте опубликованный статус.

class Article < ActiveRecord::Base
  searchable do
    text :title
    text :body
    boolean :is_published, :using => :published?
  end
end

Затем добавьте фильтр к вашему запросу

Sunspot.search(Article) do |search|
  search.with(:is_published, true)
  # ...
end
3 голосов
/ 26 октября 2010

Небольшой взгляд на кодовую базу sunspot_rails показывает метод под названием maybe_mark_for_auto_indexing, который будет добавлен в модели, включающие solr. Вы можете переопределить этот метод и установить @marked_for_auto_indexing на основе ваших критериев в конкретной модели. Его исправление обезьяны, но может помочь вам решить проблему. Код для вашей ссылки в lib/sunspot/searchable.rb.

...