そろそろ、Elasticsearchを少しずつ触っていってみようかと思いまして。
とはいえ、自分はあんまり検索エンジンはやったことがないので、まあ気ままにマイペースで試していけたらなぁと思っています。
一応、LuceneおよびHibernate Searchは趣味的に遊んだことがあります。Apache Solrは、この前初めて使いました。あと、この本は持っています。
高速スケーラブル検索エンジン ElasticSearch Server
- 作者: Rafal Kuc・Marek Rogozin’ski,株式会社リクルートテクノロジーズ,大岩達也、大谷純、兼山元太、水戸祐介、守谷純之介
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2014/03/21
- メディア: 大型本
- この商品を含むブログ (4件) を見る
が、1.5くらいの時にzipを展開して起動したことがあるくらいの状態です。
とまあ、そんな人がやってみますということで。
環境は、Ubuntu Linuxとします。
インストール
zip、tar.gzを落としてきてもよかったのですが、ここはパッケージインストールすることにします。
Download Elasticsearch Free • Get Started Now | Elastic
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html
リポジトリの追加。
$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - OK $ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list deb http://packages.elastic.co/elasticsearch/2.x/debian stable main
apt-get updateして
$ sudo apt-get update
インストール。
$ sudo apt-get install elasticsearch
バージョン指定したい場合は、「elasticsearch」の後ろにバージョンを書きます。
$ sudo apt-get install elasticsearch=2.1.1
現時点での最新版は、2.1.1です。
ディレクトリ構成
ディレクトリ構成は、こちらを参照。
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-dir-layout.html#default-paths
「/usr/share/elasticsearch」にスクリプトやプラグインなど。
$ find /usr/share/elasticsearch -type d /usr/share/elasticsearch /usr/share/elasticsearch/bin /usr/share/elasticsearch/lib /usr/share/elasticsearch/plugins
インデックスの保存先は「/var/lib/elasticsearch/data」、ログは「/var/log/elasticsearch」となります。
設定ファイルは、「/etc/elasticsearch」。
$ sudo find /etc/elasticsearch
/etc/elasticsearch
/etc/elasticsearch/logging.yml
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/scripts
環境変数の定義は、「/etc/default/elasticsearch」にあります。
起動と停止
起動。
$ sudo service elasticsearch start
停止。
$ sudo service elasticsearch stop
Kuromojiのインストール
検索に使うなら、きっと入れておいた方がいいだろうとKuromojiをインストール。
Kuromojiのプラグインって、本家に入ったんですねぇ…
https://github.com/elastic/elasticsearch/tree/master/plugins/analysis-kuromoji
インストール。
$ sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install analysis-kuromoji
とりあえず、再起動。
$ sudo service elasticsearch restart
それでは、Kuromojiの設定をしてみます。
一応、ユーザー定義辞書はある前提でいきます。中身は空ですが(Kuromojiの定義方法で書けばいいのだろうとたかをくくって…)、事前に作っておく必要があります。
$ sudo touch /etc/elasticsearch/userdict_ja.txt && sudo chown root.elasticsearch /etc/elasticsearch/userdict_ja.txt
で、こんな設定で(Solrの設定を参考にしています)。
settings.json
{ "settings": { "index": { "analysis": { "tokenizer": { "kuromoji_tokenizer_search": { "type": "kuromoji_tokenizer", "mode": "search", "discard_punctuation" : "true", "user_dictionary" : "userdict_ja.txt" } }, "analyzer": { "kuromoji_analyzer": { "type": "custom", "tokenizer": "kuromoji_tokenizer_search", "filter": ["kuromoji_baseform", "kuromoji_part_of_speech", "cjk_width", "stop", "ja_stop", "kuromoji_stemmer", "lowercase"] } } } } } }
登録。
$ curl -XPUT http://localhost:9200/myindex -d @settings.json {"acknowledged":true}
確認。
$ curl -XPOST 'http://localhost:9200/myindex/_analyze?analyzer=kuromoji&pretty' -d 'Elasticsearchは、全文検索エンジンです。' { "tokens" : [ { "token" : "elasticsearch", "start_offset" : 0, "end_offset" : 13, "type" : "word", "position" : 0 }, { "token" : "全文", "start_offset" : 15, "end_offset" : 17, "type" : "word", "position" : 2 }, { "token" : "検索", "start_offset" : 17, "end_offset" : 19, "type" : "word", "position" : 3 }, { "token" : "エンジン", "start_offset" : 19, "end_offset" : 23, "type" : "word", "position" : 4 } ] }
それっぽい。
プラグイン
プラグインは、elasticsearch-headとelasticsearch-HQあたりをとりあえず入れておけばいいのでしょうか?
いつも入れているElasticsearchのプラグイン - @johtaniの日記 2nd
Marvelとかは、今度調べましょう…。
Dockerイメージ
と、ここまでやったところで、オマケ的にDockerfileを書いてみます。
Dockerfile
FROM ubuntu:latest ENV JAVA_HOME /usr/lib/jvm/java-8-oracle ENV ELASTICSEARCH_VERSION 2.1.1 ENV ELASTICSEARCH_REPOSITORY http://packages.elasticsearch.org/elasticsearch/2.x/debian EXPOSE 9200 9300 ## Oracle JDK 8インストール RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ apt-get install -y software-properties-common && \ add-apt-repository -y ppa:webupd8team/java && \ apt-get update && \ apt-get install -y oracle-java8-installer ## ツールインストール RUN apt-get install -y wget \ curl \ vim ## Elasticsearchインストール RUN wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add - && \ echo "deb ${ELASTICSEARCH_REPOSITORY} stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list && \ apt-get update && \ apt-get install -y elasticsearch=${ELASTICSEARCH_VERSION} RUN cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.default ADD elasticsearch.yml /etc/elasticsearch/elasticsearch.yml RUN chown root.elasticsearch /etc/elasticsearch/elasticsearch.yml ## Elasticsearchプラグインインストール RUN sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install analysis-kuromoji && \ sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head && \ sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install royrusso/elasticsearch-HQ ## プラグイン等向け設定ファイル RUN touch /etc/elasticsearch/userdict_ja.txt && \ chown root.elasticsearch /etc/elasticsearch/userdict_ja.txt ENTRYPOINT service elasticsearch start && \ sudo -u elasticsearch touch /var/log/elasticsearch/elasticsearch.log && \ tailf /var/log/elasticsearch/elasticsearch.log
ホスト側からも接続できるように、「elasticsearch.yml」は以下の内容で準備。
elasticsearch.yml
network.host: 0.0.0.0
ビルド。
$ docker build -t kazuhira/elasticsearch:2.1.1 .
起動。
$ docker run -it --rm -p 9200:9200 -p 9300:9300 --name elasticsearch kazuhira/elasticsearch:2.1.1
参考にしたのは、こちらです。
https://github.com/docker-library/elasticsearch/tree/master/2.1