0

クエリを実行して、sunspot_solr gem を使用して複数のモデルで最近作成された 20 のレコードを見つけようとしています。現在は問題ありませんが、検索されたモデルの 1 つだけに追加の検証を追加したいと考えていました。

現在、私の User モデルでは、作成されたすべての新しいユーザーをリストしていますが、メールアドレスを確認したユーザーのみをリストしたいです。ユーザー認証に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 が見つからないというエラーが発生しました
4

1 に答える 1

1

インデックス作成についてもう少し読んだ後、疑いを確認し、検索のインデックスを再作成する必要があることがわかりました。これを行うために、Sunspot の readmeを調べたところ、次の行が見つかりました。

bundle exec rake sunspot:solr:reindex

テクノロジーの機能を理解する前に、それを利用しようとする悪い癖があります...

于 2012-07-17T17:11:12.287 に答える