データベースに入っているデータを Solr に入れる一つの方法 Data Import Request Handler ( DataImportHandler )


ボクは Solr にデータを入れるときは、一度 MySQLのデータベース上で ドキュメントデータを成形してから DataImportHandler を使って Solr にデータを移すというやり方をしています。
DataImportHandler というのは Solr に標準で付いているツールで、データベース以外にも XML やファイル等から データを入れるときに使える便利なツールです。


通常ドキュメントデータは複数の処理の結果を集約して作ることが多いので、フィールド毎のデータのUPDATEがしやすいRDBはその辺便利です。いろんなツールもそろっているし。


いつもの開発パターンはこんな感じです。

  1. 「Object Browser ER」というツールを使ってER図を書く。
  2. そこからフォーワードエンジニアリングでDDLを出す。
  3. DDLを使ってMySQLにデータベースとテーブルを作成
  4. 各種処理によってデータベース上でドキュメントデータを作る。
  5. DataImportHandler を使ってデータを Solr に移す。


DataImportHandler を使うための手順はこんな感じです。

  1. db-data-config.xml という XML ファイルに DataImportHandler の動作の定義を記述する。
  2. Webページ もしくは コマンドライドから DataImportHandler を起動する。


db-data-config.xml の書き方は下記の参考 ページ を見ていただきたいのですが、難しいものではないのでそこに書いてあるサンプルを真似て書けばできると思います。このファイルは solrconfig.xml や schema.xml のある conf ディレクトリに起きます。


実行するときには DataImportHandler 実行用の Webページが用意されているので、そこからデータベースの全データを入れるときには「Full-import」を、差分更新するときには「Delta-omport」を、Solrのインデックスを一度全部消してからデータを入れるときには「Full Import With Cleaning」をクリックするとデータがインポートされます。

# DataImportHandler 実行ページのURL例
http://localhost:8080/solr/admin/dataimport.jsp?handler=/dataimport


コマンドラインから実行するときはこんな感じです。バッチ処理などで周期的にデータを入れ替える必要がある場合にはこちらをつかうと良いでしょう。
これは、Solrのインデックスを一度全部消してからデータを入れる「Full Import With Cleaning」の例です。

% curl http://localhost:8080/solr/dataimport -d command=full-import -d clean=true -d commit=true -d qt=/dataimport


参考ページ
http://www.ibm.com/developerworks/jp/java/library/j-solr-update/
http://wiki.apache.org/solr/DataImportHandler
「Solr 1.4 Enterprise Search Server 」( Indexing with DIH )74〜80ページ