Articleというインデックス付きモデルがあり、solrに未公開の記事のインデックスを付けたくありません。
class Article < ActiveRecord::Base
searchable do
text :title
text :body
end
end
#publishedではない記事を指定するにはどうすればよいですか?インデックスを付けるべきではありませんか?
Articleというインデックス付きモデルがあり、solrに未公開の記事のインデックスを付けたくありません。
class Article < ActiveRecord::Base
searchable do
text :title
text :body
end
end
#publishedではない記事を指定するにはどうすればよいですか?インデックスを付けるべきではありませんか?
未公開の記事が検索インデックスに含まれないようにする場合は、代わりに次の方法で行うことができます。
class Article < ActiveRecord::Base
searchable :if => :published? do
text :title
text :body
end
end
モデルは、公開されたときにのみインデックスが作成されます。
ただし、管理者が未公開の記事も含めて記事を検索できるようにする場合は、私のアプローチはあまり面白くありません。
注:呼び出すと、パラメーターarticle.index!
に関係なく、インスタンスがインデックスに追加されます:if => :method
。
公開されたステータスを必ずインデックスに登録してください。
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
sunspot_railsのコードベースを少し調べるmaybe_mark_for_auto_indexing
と、solrを含むモデルに追加されるというメソッドが明らかになります。そのメソッドをオーバーライドして@marked_for_auto_indexing
、特定のモデルの基準に基づいて設定することができます。そのモンキーパッチですが、問題を解決するのに役立ちます。urリファレンスのコードはにありlib/sunspot/searchable.rb
ます。