Solrでデータベーステーブルのデータをインデックスする最も良い方法は?

私は現在、約10万行のテーブルを持っています。この表のデータをSolr Indexで索引付けしたいとします。

したがって、素朴な方法は次のようなものです。

  • すべての行を取得する
  • 各行について:SolrDocumentに変換し、各ドキュメントをリクエストに追加する
  • すべての行が変換されたら、リクエストを送信します

私が考えることができるこのアプローチのいくつかの問題は次のとおりです。

  • あまりにも多くのデータ(テーブル全体の内容)をメモリにロードする
  • 大きなリクエストを投稿する

しかし、いくつかの利点:

  • データベースへのリクエストは1回のみです
  • Solrへの1回のPOSTリクエストのみ

アプローチはスケーラブルではありません。テーブルが大きくなるにつれて、メモリ要件とPOSTリクエストのサイズが増えるので、それが分かります。おそらく n 行数を処理し、処理してから次の n を取る必要がありますか?

私はどの人がこれを最もうまく実装するためのアドバイスを持っているのだろうかと思います。

(ps。私はサイトを検索しましたが、これに似た質問は見つかりませんでした)。

ありがとう。

5
私はそれについて読んでいますが、直接column-to-indexFieldマッピングではありません。適用される小さな変換があり、コードでこれを実行したいと考えています。
追加された 著者 C0deAttack,
あなたのクライアントプラットフォームは何ですか? Java?
追加された 著者 Mauricio Scheffer,
追加された 著者 nikhil500,
DIHは多くの変圧器をサポートしています。 カスタムトランスフォーマーも作成できます。可能であればDIHを使用することをお勧めします - 私はそれが最小量のコーディングを必要とし、文書を投稿するよりも速くなると思います。
追加された 著者 nikhil500,

3 答え

私はnikhil500からの提案を使用しました:

DIHは多くの変圧器をサポートしています。カスタムトランスを書くこともできます。可能であればDIHを使用することをお勧めします - 私はそれが最小量のコーディングを必要とし、文書を投稿するよりも速くなると思います。 - nikhil500 2月6日17:42

1
追加された

一度にすべてのドキュメントをPOSTするか、ドキュメントごとにPOSTを行うかのバランスを取る場合は、キューを使用してドキュメントを収集し、十分に収集した後にドキュメントを送信する個別のスレッドを実行できます。この方法で、メモリ対要求時間の問題を管理できます。

1
追加された

私はかつてDBからSolrに3000行(各5フィールド)をアップロードしなければならなかった。私は各文書を別々にアップロードして実行し、1回コミットしました。操作は数秒で完了しましたが、一部のアップロード(3000件中8件)が失敗しました。

完全に機能したのは、コミットする前に50のバッチでアップロードすることでした。 50が非常に低い可能性があります。コミットを行う前にアップロードできるドキュメントの数には、制限があります。ドキュメントのサイズによって異なります。


しかし、これは一度の操作であり、ハッキングされたスクリプトで監督することができます。 後続の操作で一度に100,000行のインデックスを作成できますか?または、操作ごとに数百の更新された文書のみを索引付けすることで逃れることができますか?

0
追加された