8

最新のプロジェクトでは、太陽黒点を検索に使用しています。また、devise を使用し、次のようにユーザー モデルにインデックスを付けています。

searchable do
  text :fname
  text :lname
  text :email
  text :description
  text :twitter_username
end

このセットアップでは、solr が実行されていない限り、ユーザーはログインすることさえできません。これは、ユーザー モデルを保存するたびに、検索可能なフィールドが変更されていない場合でも、solr サーバーと何らかの通信 (インデックスの再作成?) が行われることを意味します。これは正しいです?

また、頻繁に更新される検索不可能なフィールドを持つ太陽黒点によって索引付けされている他の多くのモデルもあります。これらすべての更新で太陽黒点がそれらのインデックスを再作成しているように見えます。

検索可能なフィールドが変更されたときに、sunspot を solr とのみインターフェースするように設定する方法はありますか?

4

1 に答える 1

12

sunspot gem の最新バージョンを使用していると仮定します。

  1. モデルが変更されるたびに、Sunspot はインデックスを再作成します。この動作を微調整するには ( searchable のオプションを参照):

    searchable :ignore_attribute_changes_of => [ :average_rating, :permalink ] do text :title end

    ソースコードを見てみましょう: https://github.com/outoftime/sunspot/blob/master/sunspot_rails/lib/sunspot/rails/searchable.rb

  2. solr への最初のリクエストまで、サイトは引き続き機能するはずです。

    • 全文検索リクエスト

    • インデックス作成リクエスト

    ユーザーがログインするたびにユーザーモデルを更新しているため、再インデックスがトリガーされている可能性があります。

その他のヒント:

  • 実際、時間がかかるのはインデックス作成ではなく、commit コマンドです。commit コマンドは、デフォルトで各 Web リクエストの最後に発行されます。これは、本番環境では非常にコストがかかります。ポリシーX 秒後に自動コミットするように変更することをお勧めします。

  • solrサーバーに障害が発生した場合にサイトが機能するようにsunspotにパッチを適用したい場合は、テストenvのサーバーインターフェイスをモックするこのgemを確認することをお勧めします:sunspot_matchers

于 2011-05-18T16:56:56.737 に答える