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
您可以使用不同的页码连续调用它,以获得所有结果