Elasticsearchのローカル導入からMySQLのデータをインポートするまで

プログラミング

Elasticsearch(エラスティックサーチ)とは、Elastic社が提供する「Lucene」ベースのオープンソース全文検索エンジン。MySQL(RDBMS) 、Redshift(データウェアハウス)、DynamoDB(NoSQL)などと比べると、複雑な検索、高速に実行などが実現可能。大量にあるドキュメントデータの中から、目的のワードを含むドキュメントデータを検索することができる。FacebookやGithubでも採用されているサービスです。

今回は、Elasticsearchのローカル導入からMySQLのデータをインポートするまでを記事にしていきます。

 

【動作環境】

MacOS Sierra 10.13

 

【ツールの種類】

Elasticsearch: ドキュメントを保存・検索できる

Kibana: データを可視化できる

Logstash: データソースからデータを取り込み・変換できる

 

 

Elasticsearchワード

MySQLと比較してElasticsearchのキーワードのまとめ

 

・CLUSTER(クラスタ)とNODE(ノード)

ClusterとはNodeの集合体。

Nodeとはサーバーと同じ概念のレベルのもので、1台のサーバーに1Node用意します。トラフィックが増加した場合は、Nodeを増やすことで、処理速度の分散ができるような仕組み。

 

・INDEX(インデックス)

RDBのDatabaseに値する。1つのClusterに複数のIndexが作成できる。

 

・TYPE(タイプ)

RDBのTableに値する。1つのIndexに複数のTypeが作成できる。

 

・DOCUMENT(ドキュメント)

RDBのRowに値する。idをキーにして個々のデータを管理する。

 

・SHARD(シャード)

RAIDで構成されたハードディスクと似た仕組み。1つのindexを作成すると、合わせてShadが複数作成される。ShardはPrimary(master)とReplicaで構成されており、1Nodeには1shard配置される。

例えば、Primaryがすでに存在するShardには同じNodeにReplicaは存在できず、別のNodeに配置されます。

 

インストール

Elasticsearchを動作させるにはJava8が必要なので、導入する

$ brew cask install java8¥
$ java -version

 

作業ディレクトリの作成

esディレクトリを作成し、そこにElasticsearch関連のツールを配置していく

$ mkdir es

 

Elasticsearchの導入

Elasticsearch6.5.1(2018/12/2時点の最新)と日本語検索プラグインのkuromojiのインストール

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz
$ tar -xzf elasticsearch-6.5.1.tar.gz
$ cd elasticsearch-6.5.1
$ bin/elasticsearch-plugin install analysis-kuromoji

 

起動

$ bin/elasticsearch

http://localhost:9200/ でアクセスできるようになる

 

Kibanaの導入

Kibana6.5.1(2018/12/2時点の最新)をインストール

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-darwin-x86_64.tar.gz
$ tar -xzf kibana-6.5.1-darwin-x86_64.tar.gz
$ cd kibana-6.5.1-darwin-x86_64

 

起動

$ bin/kibana

http://localhost:5601/ でアクセスできるようになる

 

これで、ElasticsearchとKibanaをローカルに導入できた。次に、mysqlデータをElasticSearchに流し込む準備をしていく。

 

logstashをインストール

以下のリンクからダウンロード(ElasticSearchのバージョンに合わせる必要あり)

https://www.elastic.co/jp/downloads/logstash

 

mysql-connector-javaのダウンロード

以下でダウンロードして、logstash-6.5.1直下に配置

https://dev.mysql.com/downloads/connector/j/

 

mysqlデータを流し込む設定ファイルを作成

logstash-6.5.1直下にmysql.confを作成

jdbc {
    jdbc_driver_library => "mysql-connector-java-8.0.11/mysql-connector-java-8.0.11.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/DB名"
    jdbc_user => "[ユーザー名]"
    jdbc_password => "[パスワード]"
    statement => "SELECT * FROM [テーブル名]"
    type => "[タイプ]"
  }
}
output {
  if [type] == "[テーブル名]" {
    elasticsearch {
      manage_template => false
      hosts => ["localhost:9200"]
      index => "iphone"
      document_type => "%{type}"
      document_id => "%{id}"
    }
    stdout {codec => rubydebug {metadata => true }}
  }
}

 

LogStashを実行して、データを流し込む

先ほど作成した、mysql.confを実行します

$ cd logstash-6.5.1
$ bin/logstash -f config/mysql.conf

 

コメント