ElasticsearchにMySQLからデータ挿入、JDBC River Pluginのインストールと使い方

MySQL から Elasticsearch へデータ取り込みを行う JDBC River Plugin をインストールします。以下エントリーの続きとなります。

ElasticsearchのインストールとCSVからのデータ挿入 | EasyRamble
Elasticsearchのクエリとフィルターで簡単な検索を試す例 | EasyRamble

スポンサーリンク

— 環境 —
Mac OS X Lion 10.7.5

JDBC driver for MySQL のダウンロード

JDBC River Plugin の動作には、Java から MySQL への接続するための JDBC driver が必要なので、あらかじめ利用するDBベンダーの JDBC driver をダウンロードしておきます。私は、MySQL 利用なので以下のページからダウンロードしました。

MySQL :: Download Connector/J

ダウンロードしたら解凍して、.jar ファイルを /usr/share/java/ に移動します。

その後、MySQL JDBC driver へのパスを CLASSPATH 環境変数に追加。

変更を反映させる。

Java から MySQL への接続確認

テスト用の sample データベースを作成しておきます。

Java から MySQL への接続を確認するために簡単な Java プログラムを作成します。説明のないとってもシンプルなサンプルプログラム集 からお借りしました。

12345678 の部分は、MySQL の root ユーザーのパスワードに変更します。あとは、コンパイルして実行。

無事に、MySQL への接続を確認できました。これで準備OK。

JDBC River Plugin をインストール

ここからが本番ですが、MySQL 内のデータを Elasticsearch にインデックスさせるために、Elasticsearch のプラグインである JDBC River Plugin をインストールします。様々な River Plugin が用意されているので、SQL 以外のデータ形式からも色々 Elasticsearch に取り込めるようです。

https://github.com/jprante/elasticsearch-river-jdbc

JDBC River Plugin をインストール。

Github の readme にある通りに、MySQL JDBC driver を $ES_HOME/plugins/jdbc/ にコピーします。$ES_HOME がどこか分からなかったので、まずは plugins のディレクトリを調べました。

driver をコピー。

MySQL にテスト用テーブルとデータを用意して試す

テスト用の MySQL データとして以下を用意しました。

このデータを Elasticsearch に取り込んでみます。

elasticsearch を再起動。http://127.0.0.1:9200/_plugin/head/ にアクセスすると、MySQL からデータが取り込まれたのを確認できました。しかも CSV River の時と違って、JDBC River では日本語が文字化けせずに正常にインポートできています!

以上の方法では事前に Elasticsearch で mapping を作成せずに、MySQL → Elasticsearch へと直接データを入れたので、Elasticsearch のフィールドの型などは動的に決定されることになります。head プラグインで動的に作成された mappings を確認すると以下のように、id は long 型、name は sgring 型になっていました。

mapping が動的に作成されるのは若干怖い感じがしますので、以降では、事前に mapping を作成してその後 JDBC River プラグインを使う方法を紹介します。

事前に mapping を作成して MySQL からインポート

次に、Elasticsearch 側で事前に以下の mapping を作成してデータのインポートを試してみます。index 名は sample。type 名は test。

この作成した index/type => sample/test に MySQL からデータを取り込んでみます。jdbc プロパティで、index に sample、type に test を指定します。

http://127.0.0.1:9200/_plugin/head/ で確認すると、sample/test にデータが無事に取り込まれました。このように先に mapping を定義し index/type を作成した後に、JDBC River で index/type を指定してデータをインポートしてやるとフィールドの型を独自に自由に決められます。個人的にはこちらの方法のほうが安心です。

JDBC River Plugin を用いた MySQL から Elasticsearch へのデータ取り込みは以上です。

スポンサーリンク
全文検索システムを実装するには、ElasticSearch がおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!