Ruby on rails 太阳黑子solr不';t索引所有模型
我有一个模型Ruby on rails 太阳黑子solr不';t索引所有模型,ruby-on-rails,activerecord,solr,sunspot,Ruby On Rails,Activerecord,Solr,Sunspot,我有一个模型Post。我还有STI模型回顾。以下是Post的搜索配置: searchable do text :title, :content text :username do user.try(:username) end text :user_full_name do user.try(:full_name_with_username) end text :user_full_name_with_username do user.try(:full_name_with_user
Post
。我还有STI模型回顾
。以下是Post
的搜索配置:
searchable do
text :title, :content
text :username do
user.try(:username)
end
text :user_full_name do
user.try(:full_name_with_username)
end
text :user_full_name_with_username do
user.try(:full_name_with_username)
end
结束
问题是,即使我通过Sunspot.index(Review.find(id))
和Sunspot.commit添加了某些模型,也不是所有的模型都被索引
编制索引后,我尝试按用户名查找一些评论:
reviews_ids = Review.search do
fulltext params[:titles_search] do
fields(:username)
end
end.results.map(&:id)
并不是所有的评论都有结果
会是什么?如何调试它?来自Solr的搜索结果总是分页的,因此我怀疑您没有看到搜索的所有结果。默认情况下,我相信结果分页为每页20个结果
要同时查看所有搜索结果,您可以执行以下操作:
search = Review.search do
fulltext params[:titles_search] do
fields(:username)
end
paginate page: 1, per_page: Review.count
end
这将“每页元素数”设置为总评论数。因此,这应该允许您在不分页的情况下查看所有搜索结果。显然,如果你有大量的Review
对象,这将是一个巨大的内存消耗
更好的方法是使用分页行为,因此,如果您像这样重写搜索:
def search_reviews(opts = {})
options = {
page: nil,
per_page: 20,
}.merge(opts)
Review.search do
fulltext params[:titles_search] do
fields(:username)
end
paginate page: options[:page] if options[:page].present?
paginate per_page: options[:per_page] if options[:per_page].present?
end.results
end
您可以使用不同的页码连续调用它,以获得所有结果