0

次のシナリオがあります。SQL データベースから「x」個のレコード (X は数十万のオーダー) を読み取り、それらを SOLR ドキュメントに変換し、インデックスを作成して SOLR にコミットするバッチ プロセス。そう ...

1) DB からの読み取り
2) 変換
3) コミット

このプロセスは毎日実行されます。数日後、SOLR プロセスは常に可能な最大スレッド数 (1024) に達します。私は SOLR の経験はあまりありませんが、問題はコミットが多すぎることにあると感じています。

「Y」変換の後にコミットすることを考えていました(「Y」はメモリの問題を引き起こすほど大きくありません)。これは最善のアプローチですか?以前にこの問題に遭遇した人はいますか?

PS: SOLR 4 を使用しています。Java をクライアントとして使用しています。

ありがとう

4

1 に答える 1

1

デプロイメントで solrconfig.xml を変更する必要があります。

  <updateHandler class="solr.DirectUpdateHandler2">
   ...
    <!-- Perform a <commit/> automatically under certain conditions:
         maxDocs - number of updates since last commit is greater than this
         maxTime - oldest uncommited update (in ms) is this long ago
    <autoCommit> 
      <maxDocs>10000</maxDocs>
      <maxTime>1000</maxTime> 
    </autoCommit>
    -->
   ...
   ...
  </updateHandler>

<autoCommit>要素はコメントアウトされています。コメントを外して、maxDocs と maxTime に適切な値を設定します。基本的にそれは言います:

commit コマンドは、設定された時間またはドキュメント数の後に自動的に発行されます。

次の 2 つの条件のうち 1 つだけを指定できます。

<autoCommit>
    <maxTime>60000</maxTime>
</autoCommit>

コミット後に検索を再開したい場合は、次のようにすることもできます。

<autoCommit>
    <maxTime>60000</maxTime>
    <openSearcher>true</openSearcher>
</autoCommit>
于 2013-07-26T13:43:16.520 に答える