2012-07-17 65 views
0

我正在嘗試執行查詢並使用sunspot_solr gem查找最近在多個模型中創建的20條記錄。目前它沒有問題,但是我想爲其中一個正在搜索的模型添加一些額外的驗證。Rails 3 Sunspot Solr僅限條件搜索應用於新記錄

目前在我的用戶模型中,它列出了所有已創建的新用戶,但我只希望它列出已確認其電子郵件地址的用戶。我使用的設計進行用戶身份驗證和使用的活動記錄發現誰沒有被證實我會沿着線做一下所有用戶:

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找不到錯誤

回答

1

在閱讀了一些關於索引的內容之後,我確認了我的懷疑,並發現我必須重新編制索引。要做到這一點我看着Sunspot readme,發現這一行:

bundle exec rake sunspot:solr:reindex 

我試圖利用技術之前,我甚至知道他們做了什麼不好的習慣...