solrにはrollbackの機能があります。
ところがRDBと全く同じrollbackではありません。
例えばインデックス全件生成を例に上げてみます。
1,インデックス全件削除。
2,インデックス全件生成。
3,全件生成中にエラー発生。
4,catch節でrollbackを実行。
こういう場合、2は反映されず、1以前の状態に戻ります。
ただしそれは メモリ上の話です。
インデックスの物理ファイルはカッチリ削除されています。
つまりrollbackした後にtomcat等のservletコンテナを再起動すると、
全件削除された状態でインデックスがロードされてインデックスが0件になります。
RDBのように物理的にrollbackされる訳ではないのです。
これを意識していないと、以下のような事が起こりえます。
1,インデックス全件削除。
2,インデックス全件生成。
3,全件生成中にエラー発生。
4,catch節でrollbackを実行。全件生成は失敗に終わり、rollbackされる。
5,インデックス差分更新が走る。
この場合、4でインデックスが0件になり、5のインデックス差分更新が成功した場合、
差分更新の件数が1件だとすると、1件の状態でcommitが走りインデックスは1件になります。
こういった事故を防ぐ手段として、全件更新か差分更新が失敗した場合にロックファイル等を作り、
ロックファイルが有る場合は処理をせずメールでアラート通知する、等が必要になるかと思います。
他の手段としては、コアを2個用意してswapで入れ替える手法があります。
インデックス生成は core1_tmp に実行、core1_tmpの状態が正常である事を確認して、
core1 と core1_tmp をswapして入れ替える、MySQLで言うところのrename tableと同じ事をします。
CoreAdmin - Solr Wiki
手間はかかりますが、これで安全にインデックスの更新ができるのではないでしょうか。

Mapion・日本一の地図システムの作り方 (Software Design plus)
- 作者: 株式会社マピオン,山岸靖典,谷内栄樹,本城博昭,長谷川行雄,中村和也,松浦慎平,佐藤亜矢子
- 出版社/メーカー: 技術評論社
- 発売日: 2012/09/28
- メディア: 大型本
- クリック: 22回
- この商品を含むブログ (4件) を見る