0

Solr 5.0.0 を使用しています。差分インポートの構成は、 apache-wikiと同じように非常にシンプルです。

30分ごとにデルタインポートを行うようにcronジョブをセットアップしました。セットアップも簡単です。

0,30 * * * * /usr/bin/wget http://<solr_host>:8983/solr/<core_name>/dataimport?command=delta-import 

では、現在実行中のデルタ インポートが次にスケジュールされた cron ジョブよりも長くかかる場合はどうなるでしょうか?

SOLR は並列スレッドで次のデルタ インポートを起動しますか? または、前のジョブが完了するまでジョブを無視しますか?

ユーザーとドキュメントの数が時間の経過とともに増加すると、同様の問題が発生する可能性があるため、cronスケジューラで時間を延長することはオプションではありません...

4

2 に答える 2

0

私は最後に同様の問題を抱えていました。

これが私がそれを回避した方法です。

注:コアでsolrを実装しました。

コア名、最後のインデックス再作成日、再インデックス作成が必要、current_status などの solr に関する情報を保持するテーブルが 1 つあります。

上記の表から、すべてのコアに再インデックス (デルタ インポート) が必要かどうかを確認し、再インデックスを開始するスケジューラを作成しました。

再インデックス要求は、20 分ごとに送信/呼び出されます (30 分以内)。

インデックスの再作成を開始すると、テーブルも更新され、特定のコアのステータスが「進行中」としてマークされます。

10 分後、インデックスの再作成が完了したかどうかを確認するリクエストを発行します。

再インデックスを確認するために、リクエストを次のように使用しました。

final URL url = new URL(SOLR_INDEX_SERVER_PROTOCOL, SOLR_INDEX_SERVER_IP, Integer.valueOf(SOLR_INDEX_SERVER_PORT),
                    "/solr/"+ core_name +"/select?qt=/dataimport&command=status");

コミット済みまたはアイドル状態のステータスを確認し、インデックスの再作成が完了したと見なし、そのステータスをテーブルでアイドルとしてマークします。

そのため、再インデックス スケジューラは、進行中のステータスにあるコアを選択しません。

また、いくつかの更新がある場合に再インデックス化するコアのみを考慮します (フラグ「re-indexing-required」で識別できます)。

re-indexing-required が true で、現在のステータスがアイドル状態の場合にのみ、再インデックス付けが呼び出されます。

いくつかの更新 ("re-indexing-required" で識別) があるが、current_status が進行中の場合、スケジューラは再インデックスのためにそれを選択しません。

これがお役に立てば幸いです。

注 : インデックス作成と再インデックス作成に DIH を使用しました。

于 2015-05-28T14:33:42.950 に答える