Elasticsearch入門メモ
Elasticsearchというのがアツいらしいので調べた。
参考書籍『サーバ/インフラエンジニア要請読本 ログ収集〜可視化編』
◆Elasticsearchとは
elastic社が開発した全文検索エンジン。
……全文検索ってなんだ?
◆全文検索(wikiより引用)
コンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。
全文検索エンジンはなにもElasticsearchだけというわけではなくて、Apache Solr、Amazon CloudSearch、Groongaなど色々ある模様。IT業界で複数の文書ファイルといえばサーバやネットワーク機器が出力するログデータで、それを整理して可視化するような事例がほとんど。
◆Elasticsearch用語
・Kibana
ElasticsearchのWEBインタフェース。kibana経由でElasticsearchに検索クエリを投げて、データを整理させるイメージか。
・クラスタ
複数のElasticsearchプロセスを1つのElasticsarchとして動作させること、およびその機能を使って1つのElasticsearchを構成する複数のElasticsearchの集まりのこと。単に各Elasticsearchでクラスタ名を同一にすれば構成できるらしい。カンタン。ネットワーク機器も見習ってくれ。。
・ノード
Elasticsearchの1プロセスに相当。クラスタへ投げられたクエリは、ノードへのリクエストに変換されて、各ノードで処理される。
・ドキュメント
Elasticsearchが扱うデータの最小単位。RDBMSの1レコードに相当。
・フィールド
RDMBSのカラムに相当。検索に影響する箇所。
・インデックス
ドキュメントの集合。Elasticsearchでは基本的にインデックス単位でデータを管理し、クラスタ内の各ノードに分散して保持されることで大量のデータを扱うことができる。
・インデックスタイプ
インデックスに登録するドキュメントの論理的な分類。
・シャード(セグメント)
インデックスを小さな単位に分割したもの。なんで分割するのかというと、インデックスで説明した通りクラスタ内の各ノードにインデックスを分散して保持する(ことができる?)から。多分RAIDと同じような感じで、冗長性や処理速度の向上が見込める?
プライマリシャードとレプリカシャードがあって、あるインデックス内を複数のシャードに分けて、更に各シャードがプライマリシャードとレプリカシャードとして別々のノードに分かれるイメージか。多分シャードというのは領域的(このデータはこのプライマリシャードに置かれて、それからそのプライマリシャードに紐づくレプリカシャードにコピーされる)なものを指している。
・マッピング
インデックスに保存されるデータの構造を定義するためのもの。インデックスタイプ毎にドキュメントのフィールドがどのような名前で、どのような型のデータを保存するかを記述する。つまり各ドキュメントがどのようなフィールドで区切られているのかは、このマッピングで設定するということ?
・転置インデックス
「入力されたデータを特定のロジックで単語に分割し、単語をキーとして入力されたデータのIDをバリューとして保存する」もの。
……???
Elasticsearchのインデックス(およびシャード)は、Apache Lucene(また新しい言葉が出てきた。。)でデータ管理しているらしく、このLuceneは全文検索のためにデータを転置インデックスに変換して保存し、検索するらしい。。ここまで全く意味が分からない。。
最後の最後で一番意味の分からない言葉が出てきたが、全文検索のために重要な処理らしい。とは言えこの先「転置インデックス」という言葉を再び使う機会は無い気がしている。
◆Apache Lucene
「ルシーン」と読むらしい。Javaで記述された全文検索エンジン。
用語を知る段階から疲れる。