我有一个名为Article的索引模型,我不希望solr索引未发表的文章。
class Article < ActiveRecord::Base
searchable do
text :title
text :body
end
end
如何指定不是#published的文章?不应该编入索引?
答案 0 :(得分:7)
请务必为已发布的状态编制索引。
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
答案 1 :(得分:7)
如果您想确保未发布的文章从不包含在搜索索引中,您可以这样做:
class Article < ActiveRecord::Base
searchable :if => :published? do
text :title
text :body
end
end
该模型将仅在发布时编入索引。
如果您还希望管理员能够搜索文章,包括未发布的文章,那么我的方法就不那么有趣了。
注意:无论article.index!
参数如何,调用:if => :method
都会将实例添加到索引中。
答案 2 :(得分:3)
稍微了解一下sunspot_rails的代码库,会发现一个名为maybe_mark_for_auto_indexing
的方法,该方法将被添加到包含solr的模型中。您可以覆盖该方法,并根据特定模型中的条件设置@marked_for_auto_indexing
。它的猴子修补,但可以帮助您解决问题。您引用的代码位于lib/sunspot/searchable.rb
。