Hatena::ブログ(Diary)

Solr, Python, MacBook Air in Shinagawa Seaside RSSフィード

2010-01-27

[] データベースに入っているデータを 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 実行ページのURLhttp://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ページ

t98907t98907 2010/01/28 13:48 多言語データを1つのフィールドに格納するのって無理ですよね?

knaka20blueknaka20blue 2010/10/12 11:43 形態素解析器を言語によって自動的に切り替えるのことが必要なのであれば難しいかもしれませんね。でも、形態素を行った後のデータを Solr に入れるのであれば問題ないと思います。日本語のような単語毎の区切りがない言語も、英語のように事前に単語の間に空白を入れておくのです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/knaka20blue/20100127/1264583943
リンク元