3

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>

助けていただければ幸いです。事前にどうもありがとうございました!

4

1 に答える 1

2

私は問題を見つけました、ただRTFMをしなければなりませんでした...デフォルトのクリーンオプションがTRUEであるため、私は自分自身をだましました、それはFALSEだと思いました。したがって、他のすべてのURLを&clean = falseで呼び出すのではなく、最初のURLを&clean=trueで呼び出しました。したがって、URLを呼び出すたびに、インデックス全体がクリーンアップされます。&clean = falseを指定してURLを呼び出すと、すべてのドキュメントの合計が正しくなります。

于 2011-12-16T12:22:54.263 に答える