Elasticsearch
データ分析基盤構築入門 Fluentd、Elasticsearch、Kibanaによるログ収集と可視化
上記を買ってきたので、とりあえずElasticsearch部分だけ学習した。
その部分をまとめる。
【アーキテクチャ】
ノード
Easticsearchの1プロセス相当。同一サーバ内で複数ノード起動が可能。ノード名はデフォルトでUUID.
複数のノードを1つのElasticsearchとして動作させることが可能。ノード群をクラスタという。クラスタ名のデフォルトはelasticsearch。
ドキュメント
Elasticsearchが扱うデータの最小単位で、基本json形式。
RDBの1レコードに相当する。
フィールド
RDBのカラムに相当。フィールド毎に型指定が可能。
インデックス
ドキュメントの集合。RDBのテーブル相当(でよいのか?)
RDBのDBに相当
インデックスをノードに分散させる単位がシャード。
タイプ
インデックスに登録するドキュメントを分類する機能。
ドキュメントはタイプを一つ選択できる。
シャード
分割したインデックスのこと。
インデックスに保存するデータ構造を定義する際に利用する。
タイプ毎にドキュメントのフィールドの特徴を記述する。
実際にElasticsearchをダウンロードしてElasticsearchを起動してみたところある程度ログが出たところで動かない。
エラーログっぽいものも出ていない。Ctrl+cで終了しようとしたところ
「バッチジョブの終了」云々と何か動いているのは確認。
調べるのは時間かかりそうと思い、とりあえず先に進む。
インデックスの作成
ElasticsearchはインデックスをURLにアクセスすることで作成できる
curl -XPUT http://localhost:9200/インデックス名
注意点として、Elasticsearch5.0からPUTのみ対応していること。
インデックスの削除
コマンドの引数を「XPUT」から「XDELETE」に変更するだけ
curl -XDELETE http://localhost:9200/インデックス名
データの取り込み
curl -XPUT http://localhost:9200/インデックス名/タイプ名/-オプション "リクエストボディ(例えばjsonなど) "
データの検索
curl -XGET http://localhost:9200/インデックス名/_search -d ' { 検索条件 } '
検索条件の部分に条件を指定する。指定する条件は主に以下の通り。
パラメータ | デフォルト | 説明 |
---|---|---|
query | - | 検索条件。クエリDSLと呼ばれるものが複数あり |
from | 0 | 検索結果に含まれるデータの開始位置 |
size | 10 | 検索結果に含まれるデータのサイズ |
sort | _score | ソートの指定。asc/descで順序指定 |
_source | - | 検索結果に含むフィールドの指定 |
aggs | - | 検索結果に含まれるデータに対し、集計処理を施す |
全件検索
検索条件を指定せず、登録済データをすべて取得するクエリDSL
curl -XGET http://localhost:9200/インデックス名/_search -d ' { "query":{ "match_all":{} } } '
取得結果
項目 | 説明 |
---|---|
took | 検索にかかった時間 |
hits | 検索結果情報 |
hits.total | 検索条件にヒットした件数 |
hits.hits | 検索にヒットしたドキュメントの配列 |
Aggregation
aggregationは取得したデータに対して集計を行う機能。
curl -XGET http://localhost:9200/インデックス名/_search -d ' { "query":{ "match_all":{} } }, "aggs":{ "request_aggs":{ "terms":{ "field":"request", "size":10 } } } '
上記例は
「全件検索結果に対し、requestフィールドの値ごとのデータ件数を取得するaggregationを指定する」
(aggsはaggregationsの省略を表し、どちらでも使ってもよい。)
(また、request_aggsは、aggregationで取得した結果のラベル、aggregationの名前だと思えばよい。)
「terms」がaggregationのタイプ。そのほかのタイプは以下に記載。
タイプ | 説明 |
---|---|
terms | インデックスの値ごとにドキュメント数を集計 |
range | インデックスの値を元に指定された範囲でドキュメントを集計 |
histogram | インデックスの数値データを元に、指定された間隔でドキュメント数を集計 |
statistical | インデックスの数値フィールドの統計値 |
filter | 指定されたクエリのドキュメント数を集計 |
Elasticsearchを利用して検索結果を取得できた。
マッピング
本書を読んでだとよくわからなかった。
この記事を読んだらマッピングというのはRDBのテーブル定義
だということが分かる。
マッピングの箇所が非常に適当になったが、とりあえずまとめた。
【追記】