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
コメント