2012-04-25 22 views
3

Rails 3とSunspot solr 3.5で作業しています。私のアプリケーションでは、Solrを使用してユーザー生成コンテンツを索引付けし、他のユーザーに対して検索可能にします。目標は、ユーザーがアップロードした時点からできるだけ早くこのデータを検索できるようにすることです。これがリアルタイム検索に該当するかどうかわかりません。特定の記述に基づいて、ユーザの検索はpost_itemに提供された場合ように太陽黒点3.5。リアルタイム検索のインデックスを手動で更新する

私のアプリケーションは二つのモデル

  1. 投稿
  2. PostItemsポスト項目からのデータを含めることによって

Iインデックスの記事があります対応する投稿オブジェクトが検索で利用可能になったことを記録する。

ユーザーは頻繁にpost_itemsを更新するので、新しいpost_itemが追加されるたびに、新しいpost_itemが検索時に利用できるように、対応するpostオブジェクトを再インデックスする必要があります。

私は新しいpost_itemオブジェクトを受け取るたびので、現時点では私はthis documentationに応じて瞬時にインデックスを更新し、コミット

 

post_item.post.solr_index! # 
 

を実行します。これは機能しますが、このシナリオでインデックス作成を処理する正しい方法ですか?私はhereを読んでいる間に呼び出しインデックスがsolrを壊すかもしれないと読んでいます。また、頻繁に手動でインデックスを呼び出す方法はありません。

正しい方法でこれを行うための提案があります。この宝石に​​

を使用する

答えて

1

試してElasticSearchへの切り替え以外の選択肢は、あなたがより毎分、のは言わせ、バッチREINDEXすることができるようになりますし、それは間違いなく、インデックス

+0

しかし、どのようにすれば、バッチインデックス作成中にImが検索しないことが保証されますか?リアルタイム検索中にソルバーが壊れる原因は何ですか?検索を行わずにインデックスを作成するための良い時間が1つしかないからです。 – Sid

+0

私はこのsolrconfig.xmlのチューンを見つけました。http://solr-ra.tgels.org/wiki/en/Near_Real_Time_Search_ver_3.xしかし、あなたのデータが本当に機密性が高い場合は、実稼働環境でテストしなかったので、この機能を2回テストする必要がありますフロントエンドのユーザー検索ではバックエンドのインデックス作成に問題はなかったのだから - 1日あたり10K人の訪問者/ 200人の新しいドキュメントが追加された) – okliv

1

もしブレーキではないでしょうがありますあなたはちょうど始めて、SolrとElasticSearch、go with ElasticSearchのどちらかを選択する贅沢を持っています。

私たちはSolrをプロダクションで使用し、インデックスと検索ボリュームが増加するにつれ、多くの奇妙な問題に遭遇しました。結論は、Solrは巨大な文書(単語/ pdfの内容)を索引付けし、多数(数十億)の索引付けを行っていましたが、索引を1日に1回または誰も検索しないで数日更新しました。

文書が小さく、数が少ない(何百万もの)小規模な更新がランダムで連続的で、検索が幾分リアルタイムである必要がある(5〜10秒の遅延が問題ありません) 。

私たちがサーバーを調整するために適用したトリックのいくつか。

removed all commits (i.e., !) from rails code, 
use Solr auto-commit every 5/20 seconds, 
have master/slave configuration, 
run index optimization(on Master) every 1 hour 
and more. 

コミットがトリガーされると、スレーブで高いCPU使用率が表示されます。その結果、検索に時間がかかります(60秒を超える場合があります)。

また、バッチ処理インデックスsunspot_index_queue gemが高いCPUの問題を解決できるかどうかは疑問です。

関連する問題