#はじめに
Elasticsearchは、すべての種類のドキュメントをほぼリアルタイムで検索する際に使用できる検索エンジンです。
また、MongoDBも非常に利用者の多い NoSQLデータベースで、こちらはデータ保存にJSONデータモデルを使用しますが、標準SQLでMongoDBをCRUD操作できればより良いかもしれません。
この記事では、DataDirect コネクタを活用し、MongoDBからElasticsearchにJDBCでデータ連携。リアルタイムに分析する方法について記述します。DataDirectコネクタについては、DataDirect for MongoDB JDBCドライバでもご覧ください。
記事の前提
Elasticsearch 2.3.4
MongoDB
データをお持ちでない場合は、MongoDBが提供する Restaurantサンプルデータ を使用ください。
#DataDirect for MongoDB JDBCコネクタのインストール
お試しとして、こちらから DataDirect MongoDB 用コネクタ をダウンロードします。
PROGRESS_DATADIRECT_JDBC_MONGODB_WIN.zip
を解凍後、
PROGRESS_DATADIRECT_JDBC_INSTALL.exe
を実行し、MongoDB用コネクタをインストールします。
#Elasticsearch用 JDBCインポーターの設定
-
こちらから、Elasticsearch用のJDBCインポーター をダウンロード&解凍します。
-
DataDirect MongoDB JDBCコネクタ(mongodb.jar)
を
C:\ProgramFiles\Progress\DataDirect\JDBC_60\lib
から
\path\elasticsearch-jdbc-2.3.4.0\libフォルダにコピーします。 -
\path\elasticsearch-jdbc-2.3.4.0\bin
に移動し、batファイルを以下のスクリプトで作成し、保存します。
@echo off
set DIR=%~dp0
set LIB=%DIR%..\lib\*
set BIN=%DIR%..\bin
REM ???
echo {^
"type" : "jdbc",^
"jdbc" : {^ "url" : "jdbc:datadirect:mongodb://:27017;DatabaseName=;TransactionMode=Ignore",^
"user" : "",^
"password" : "",^
"sql" : "select BOROUGH, RESTAURANT_ID, CUISINE, NAME, _ID from restaurants",^
"elasticsearch" : {^
"cluster" : "elasticsearch",^
"host" : "localhost",^
"port" : 9300^
},^
"index" : "restaurants"^
}^ }^ | "%JAVA_HOME%\bin\java" -cp "%LIB%" -Dlog4j.configurationFile="%BIN%\log4j2.xml" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter"
#MongoDBデータをElasticsearchにインポート
1, 接続が確立したら、Elasticsearchインストールフォルダに移動し、まだ実行されていない場合はコマンドを使用して実行します。
bin\elasticsearch.bat
2, \path\elasticsearch-jdbc-2.3.4.0\bin
に移動し、先ほど作成したバッチファイルを実行して、MongoDBからElasticsearchへのデータのインポートを開始します。結果はログフォルダ内のjdbc.logで確認できます。
#データの検索
これで、MongoDBデータはElasticsearchノードにあるため、自由自在に検索できます。
参考としていくつかの例を示します。
(これらのリンクは、上記の手順でローカルのElasticsearch環境をセットアップした後にのみ有効です。)
http://localhost:9200/restaurants/
http://localhost:9200/restaurants/_search
http://localhost:9200/restaurants/_search?q=CUISINE:Chinese
簡単ですね!