Wikipedia の本文データをデータベースに投入する手順

Wikipedia の本文データは、XML形式で公開されています。
(詳しい内容は、Wikipediaのダウンロードできるデータファイル一覧 | mwSoft が参考になります)
これをデータベースに投入する手順として、xml2sqlを使う方法がよく紹介されていますが、Wikimedia では「これを使ったやり方は推奨しない」と明記されています。


かといって、importDump.php を使うには PHP 環境を用意しなくていけません。
なので、Java で動く MWDumper を使って jawiki-latest-pages-articles.xml.bz2 (Wikipedia の本文データ)を投入してみました。

ダウンロード

上記をダウンロードして、カレントディレクトリにまとめて置いておいてください。

手順

MySQL 上でデータベースを作ります。*2

echo "CREATE DATABASE wikidb;" | mysql -u root


データベース定義を投入します。

mysql -u root wikidb < tables.sql


データを投入します…が、デフォルト設定のままだと com.mysql.jdbc.PacketTooBigException が発生するので、MySQL の設定を変更します。
参考: MySQLで大きなデータを登録しようとするとcom.mysql.jdbc.PacketTooBigException: 発生 - on the center line.

[mysqld]
max_allowed_packet = 16M    # この行を追加
vi /etc/my.cnf
/etc/init.d/mysql restart


本文データを投入する。
(オプション設定については、 Manual:MWDumper - MediaWiki を参考にしてください)

java -server -classpath mysql-connector-java-5.1.25-bin.jar:mwdumper.jar \
   org.mediawiki.dumper.Dumper --output=mysql://127.0.0.1/wikidb?user=root \
   --format=sql:1.5 jawiki-latest-pages-articles.xml.bz2


環境にもよりますが、2時間ぐらいかかります。*3
しばらくお待ちください。


終わったら、試しにデータを表示します。

echo "SELECT * FROM text LIMIT 1;" | mysql -uroot wikidb


文字化けせずに無事データが帰ってくれば完了です。

どう使う?

考えてなかった…。

*1:データが大きい(1.6GB)ので要注意!

*2:ユーザ名、パスワードは適宜設定してください。

*3:Disk I/O の性能によるみたいです。