概要
簡単に全文検索を可能にしてくれるElasticSearchの実装です。
機能が多い分説明も増えるので少しずつ紹介していこうと思います。
環境
Java8のインストール
We recommend installing the Java 8 update 20 or later, or Java 7 update 55 or later. Previous versions of Java 7 are known to have bugs that can cause index corruption and data loss.
とあるのでJava8をインストールします。もし既にOpenJDKを導入していたら
$ sudo apt-get purge openjdk*
で削除しておきます。
ではJava8のインストール。
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get install oracle-java8-installer
環境変数とかの設定をしてくれてJava8をデフォルトに設定する為に以下のパッケージを入れます。
$ sudo apt-get install oracle-java8-set-default
確認します。
$ java -version java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode) $ javac -version javac 1.8.0_60
ElasticSearchのインストール
ElasticSearchのリポジトリを追加します。
$ wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add - $ echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
パッケージリストを更新してインストールします。
$ sudo apt-get update && sudo apt-get install elasticsearch
自動起動設定をしてサービスを起動すれば完了です。
$ sudo update-rc.d elasticsearch defaults 95 10 $ sudo service elasticsearch start
curlで動作確認します。
$ curl localhost:9200 { "status" : 200, "name" : "Crime-Buster", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.2", "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec", "build_timestamp" : "2015-09-14T09:49:53Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
設定の編集
設定するconfigが2つあるので注意してください。
メモリ
搭載メモリの半分が推奨値です。今回VMが2Gのメモリを搭載しているとします。
/etc/default/elasticsearch
を編集
ES_HEAP_SIZE=1g
もしスワップを禁止する場合は以下の設定をします。
/etc/default/elasticsearch
を編集
MAX_LOCKED_MEMORY=unlimited
次に/etc/elasticsearch/elasticsearch.yml
を編集
bootstrap.mlockall: true
ファイルディスクリプタ
ElasticSearchが開けるファイルの数は、32kまたは64kを公式では推奨してます。
/etc/default/elasticsearch
を編集。
MAX_OPEN_FILES=65535
シャード
/etc/elasticsearch/elasticsearch.yml
を編集。
処理を並列化させパフォーマンスを向上させるためなので、基本的にサーバ台数分にします。
1台に複数シャードを設定しても効果は低いです。
今回は単なる検証用のため複数シャードを設定してみます。
index.number_of_shards: 5
レプリカ
/etc/elasticsearch/elasticsearch.yml
を編集。
デフォルトは1です。local開発では1台だけだと思うので、このままだとレプリカサーバが足りなくてステータスがyellowになります。
なのでlocal開発では0にしておきます。
index.number_of_replicas: 0