Solr インデックスの構築中に問題が発生しました (Apache Tomcat 6.0.33 上の Lucene & Solr 3.4.0)。
索引付けする文書のデータは、Oracle データベースから取得されます。CLOB の負荷を処理する必要があるため、dataimport をいくつかの requestHandler に分割して、データベースからデータをフェッチする際のパフォーマンスを向上させました (マルチスレッド シミュレーション)。これらの requestHandlers は、私の solrconfig.xml で次のように構成されています。
<requestHandler name="/segment-#" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">segment-#.xml</str>
</lst>
</requestHandler>
インデックスを作成するには、最初の DataImportHandler を clean=true オプションで開始し、次に他のすべてのセグメントの完全インポートを開始します。すべてのセグメントが完了すると、ステータス ページ ( http://host/solr/segment-# ) に、各セグメントに対して (データベースの SELECT COUNT(*) ステートメントに従って) 正しい行数がフェッチされたことが示されます。処理されます。ここまでは順調です。
しかし、ここでコアのステータス ページ ( http://host/solr/admin/core ) を呼び出すと、numDocs はすべてのセグメントの合計ではありません。常にいくつかのドキュメントが不足しています。インデックスの構築を数回試みましたが、違いは常に変化していました。合計すると、インデックスには 830 万のドキュメントがあるはずですが、実際には常に約 100.000 のエントリが欠落しています。*:*
numDocs は、Solr 管理インターフェースを介したクエリで見つけることができる数と同じです。
情報ストリームをオンにし、ログ エントリと Tomcat のログを確認しましたが、手がかりが見つかりませんでした。私は何を間違っていますか?
私は 17 の requestHandlers を使用しており、 <indexDefaults> は次のように構成されています。
<useCompoundFile>false</useCompoundFile>
<mergeFactor>17</mergeFactor>
<ramBufferSizeMB>32</ramBufferSizeMB>
<maxBufferedDocs>50000</maxBufferedDocs>
<maxFieldLength>2000000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
<lockType>native</lockType>
助けていただければ幸いです。事前にどうもありがとうございました!