Rails 3 Sunspot Solr条件搜索仅适用于新记录



我正在尝试执行一个查询,并查找最近在多个模型中使用sport_solr gem创建的20条记录。目前,它实现了这一点,没有问题,但我想只为正在搜索的一个模型添加一些额外的验证。

目前,在我的用户模型中,它列出了所有创建的新用户,但我只希望它列出已确认电子邮件地址的用户。我正在使用Devise进行用户身份验证,并使用活动记录来查找所有尚未确认的用户

User.where("confirmed_at is null")

或者反过来测试相反的情况。我试着把它和我的solr搜索集成在一起…

型号

#Unless the user being searched hasn't been confirmed...
searchable :unless=> proc { |user| user.confirmed_at == nil } do
    time :created_at
    time :confirmed_at
  end 

控制器

@updates = Sunspot.search(Upload,Help,User) do    
      without(:confirmed_at, nil)
      order_by(:created_at, :desc)
      paginate page: 1, per_page: 20
end

然而,此添加的条件仅消除了在将该条件添加到模型后创建的用户记录。我不完全确定索引是如何工作的,但它似乎是在缓存没有应用新添加的条件的旧信息。我可以通过创建一个新的用户记录来确认这一点,我会立即注意到,在我验证电子邮件地址之前,它不会被索引。

我尝试过的:

  1. 停止和重新启动服务器
  2. 正在停止服务器并尝试停止并重新启动solr,但这导致找不到PID错误

在阅读了更多关于索引的内容后,我确认了我的怀疑,并发现我必须重新索引我的搜索。为了做到这一点,我查看了Sunspot的自述文件,发现了这一行:

bundle exec rake sunspot:solr:reindex

我有一个坏习惯,就是在我还不了解技术的作用之前就试图利用它们…

最新更新