使用Sunspot从Solr索引中排除草稿
我有一个名为Article的索引模型,我不希望solr索引未发表的文章。
class Article < ActiveRecord::Base searchable do text :title text :body end end
如何指定不是#published的文章? 不应该编入索引?
务必索引已发布的状态。
class Article < ActiveRecord::Base searchable do text :title text :body boolean :is_published, :using => :published? end end
然后在查询中添加一个filter
Sunspot.search(Article) do |search| search.with(:is_published, true) # ... end
如果您想确保未发布的文章从未包含在搜索索引中,您可以这样做:
class Article < ActiveRecord::Base searchable :if => :published? do text :title text :body end end
然后,该模型仅在发布时编制索引。
如果您还希望管理员能够搜索文章,包括未发布的文章,那么我的方法就不那么有趣了。
注意:调用article.index!
无论如何:if => :method
param,都会将实例添加到索引中。
稍微查看sunspot_rails的代码库,会显示一个名为maybe_mark_for_auto_indexing
的方法,该方法将添加到包含solr的模型中。 您可以覆盖该方法,并根据特定模型中的条件设置@marked_for_auto_indexing
。 它的猴子修补,但可以帮助您解决问题。 你引用的代码在lib/sunspot/searchable.rb
。