使用Sunspot从Solr索引中排除草稿

Bog*_*iev 4 ruby solr ruby-on-rails sunspot

我有一个名为Article的索引模型,我不希望solr索引未发表的文章.

class Article < ActiveRecord::Base
  searchable do
    text :title
    text :body
  end
end
Run Code Online (Sandbox Code Playgroud)

如何指定不是#published的文章?不应该编入索引?

Sim*_*tti 7

请务必索引已发布的状态.

class Article < ActiveRecord::Base
  searchable do
    text :title
    text :body
    boolean :is_published, :using => :published?
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在查询中添加过滤器

Sunspot.search(Article) do |search|
  search.with(:is_published, true)
  # ...
end
Run Code Online (Sandbox Code Playgroud)


web*_*mat 7

如果您想确保未发布的文章从未包含在搜索索引中,您可以这样做:

class Article < ActiveRecord::Base
  searchable :if => :published? do
     text :title
     text :body
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,该模型仅在发布时编入索引.

如果您还希望管理员能够搜索文章(包括未发布的文章),那么我的方法就不那么有趣了.

注意:article.index!无论:if => :methodparam 如何,调用都会将实例添加到索引中.