elasticsearchについて
概要
elasticsearchとは、[1]
- Elastic社が開発している、スケーラビリティに優れた全文検索エンジン
- リアルタイムデータ分析、ログ解析、全文検索など様々な分析が可能になる
- ログ集約のLogstashやfluentd、可視化ツールのkibanaと一緒に使われることが多い。また、日本語用に日本語形態素解析エンジンの kuromojiを導入して使われる。
- 複数のデータベースを横断して検索することが、ごく当たり前の用途として提供されている
動作環境
- elasticsearch: 6.7.1
- kinaba: 6.7.1
始め方
導入の仕方は2種類。
1. homebrewからインストール
-
brew install elasticsearch
次にpluginを入れる。使いたいanalyzerに応じて異なるが、日本語の場合kuromojiを使うことが多い。 /bin/elasticsearch-plugin install analysis-kuromoji
2. dockerを使う(推奨)[2]
elasticsearchは通常、kibana というアプリケーションを用いて分析やデータの可視化をするためdocker-composeで同時にインストールしたほうが楽。また、ホストの環境に影響しにくいのもポイント。
ファイル構造
|--- docker-compose.yml
|--- es
| |--- Dockerfile
|
|---kibana
|--- Dockerfile
docker-compose.yml
version: '2'
services:
elasticsearch:
build: es
volumes:
- es-data:/usr/share/elasticsearch/data
ports:
- 9200:9200
expose:
- 9300
ulimits:
nofile:
soft: 65536
hard: 65536
# https://github.com/docker-library/elasticsearch/issues/111
# uliimit: リソースの制限を拡大させている。
kibana:
build: kibana
links:
- elasticsearch:elasticsearch
ports:
- 5601:5601
volumes:
es-data:
driver: local
es/Dockerfile
FROM elasticsearch:6.7.1
# kuromojiをインストール
RUN elasticsearch-plugin install analysis-kuromoji
kibana/Dockerfile
FROM kibana:6.7.1
開発の流れ
今回は参考サイト[3]でチュートリアルをした。それを元にフローチャートを考えた。
1. まず、分析するデータを作成or見つける
2. index_templateを作成する。
つまり、そのtemplateを使ってindexを作成する
3. mapping_templateを作成する。
つまり、そのtemplateを使ってmappingを作成しておく。
mappingというのは、index内をtype別に綺麗に分ける際の決まりのこと。
4. データを登録する。
elasticsearchはjson形式のみ対応なので、うまく整形する。その時に便利なAPIを使えば大量のデータでも楽に登録ができる。
5. 検索やデータの分析
*(注意)開発のやり方について
開発に慣れている場合は、curl
を使った方がわかりやすい。
ただ、検索はクエリが長くなるので'kibana'のDev toolのほうが楽。
注意点
- shardとreplica[1]
実際に動かしてみないとわからない。というのが本音。
一応、開発時点ではコピーを作らなくすることで解決。つまり、replica数を0にする。 -
バージョンの違い
参考サイトのelasticsearchのversionは大体がver.2であるが、最新はver.6
その差がかなりのエラーを出すことがわかった。
参考サイト[2]を参照してエラーを処理すること。-
Content-Type の指定が必須
> Elasticsearch への API は Transport通信を除いて、HTTP(s) リクエストによって操作します。Elasticsearch 5系までは自動検出していた Content-Type ヘッダですが、Elasticsearch 6系より指定が必須となりました。[2] - フィールドタイプにstringが指定できない > Elasticsearch 5系から文字列を扱うフィールドタイプがstringからtext、keywordに変更しました。5系ではstringタイプは非推奨となり指定することができました。6系ではstringタイプを指定するとエラーになるように変更となりました。[2]
-
Content-Type の指定が必須
mappingについて
注意点として、一度定義したマッピングは変更することができない!!
変更する場合はインデックスごと削除して再作成する必要がある・・・
逆にフィールドの追加はできる。
参考サイト
[1]Elasticsearchのshardとreplica
[2]Elasticsearch 6 を利用する前に把握しておいた方がよさそうなこと
参考サイト
[1]3分で分かった気になる、Elasticsearchとは?
[2]Elasticsearch, KibanaをDocker環境で動かしてみた
[3]Elasticsearch 6 を使ったデータ検証 その1(Dockerでコンテナの作成と確認)
[4]公式サイトのチュートリアル