Elasticsearchで開発する機会があるので、基礎的なことから学習するため、
Elasticsearch実践ガイド
を買いました。読んだ個人的な感想をメモします。
今回読んだ目的
以前、EC2にElasticsearch、Fluentd、Kibanaを入れる方法で、アクセスログをElasticsearchに入れてkibanaで分析するのをしたのだけど、今回は、
- CSVファイルを読み込み、そこに記載されたデータをElasticsearchに登録
- API経由でElasticsearch内のデータをいろいろな方法で検索
をする必要があり、1からの学習する為、読んだ。
Elasticsearch自体は、Amazon Elasticsearch Serviceを使うので、環境周りの設定は後回しで、使い方を主に学習。
概要とメモ
「第1章 Elasticsearchとは」から「第2章 Elasticsearchの基礎 2-3 REST APIによる操作」
全文検索の仕組みからElasticsearchの基本的な事柄が記載。
ネットの記事だと、簡単な説明のあと、インストール作業、使ってみよう的なのが多いので、書籍の方がまとまった情報が得やすい。
データを入れて検索する処理などが、MySQLなどのDBと似ているので、 インデックスと聞くと検索を早くするのに使うものを想像しがちなんですが、ElasticsearchではDBのテーブル的なものを意味するものでだった・・。
Elasticsearchは独特?の用語が使われているので、用語は正しく理解することをおすすめ。
一部抜粋
- ドキュメント:DBのレコードに該当
- フィールド:ドキュメント内の項目名、値のセット
- インデックス:DBのテーブルのようなもの
- ノード:Elasticsearchが動作するサーバー
- クラスタ:ノードのグループ
「2-3 REST APIによる操作」は、実際に使いながら方がわかりやすいのでざっと読むだけ。
「第2章 2-4 Elasticsearchの導入方法」
いろいろな構築方法が書いてあるが、
今回は本を買う前に、初めてのElasticsearch with Dockerを見て、docker環境を作ってたので、その環境を利用。バージョンは7.1(AWSでサポートしている最新バージョンが7.1なので)。
書籍では、6.2でしたが、基本操作を見るだけだったので、バージョンの違いによる影響は感じません。
「第3章 ドキュメント/インデックス/クエリの基本操作」
一般的なDBのようにテーブルを定義しなくてもデータを入れてくれますがドキュメントタイプを定義することでテーブル定義のように扱うことも可能。ただ一度定義するのを変更することができないので、要注意(フィールドの追加はできても変更はできない)。
curlで実行、確認ができるので、デバッグがしやすいし、連携するプログラムも書きやすい。
ここには載ってなかったが、
あいまい検索は、
Elasticsearchのfuzzy queryを使って、あいまい検索を試してみる
日付の差分を条件にしたい時は、
Elasticsearch でフィールド同士の差分で検索したい
ランダムにソートしたい時は、
よく使うElasticSearchのクエリ(データ取得)
の各ページを参考にできそう。
「第4章 Analyzer/Aggregation/スクリプティングによる高度なデータ分析」
Analyzer
形態素解析だけでなく、フィルターをかけて文字列の変換をしてくれる。
以前、DBで検索処理した時は、ひらがなをカタカナに、全角英数字を半角英数字に変換してデータを入れて、検索対象の文字列も同様に変換することで、できるだけ文字のゆらぎを抑えて、広範囲に検索できるようにしてたら、それらを全部やってくれる。
できることが多くので逆に迷いそうではある・・。
Aggregation
集計ができる機能。SQLで GROUP BY して COUNT するイメージ。
SQL文より記述量が多く、慣れるまで面倒そう・・。
「第5章 システム運用とクラスタの管理」
今回、AWSを利用するのでここはざっと読んで終わり。
(AWSがどこまでやってくれるは、別途調査が必要かなと。)
いろいろと注意点があるので、オンプレでやる時は考慮する点が多そう。
「第6章 Elasctic Stack インテグレーション」
Kibana、Logstash、Beats、X-Packについて書かれてるけど、使う予定がないので流し読み。
感想
初心者にもわかりやすい。特に第1章〜第3章まではわかりやすくこれを読めば、ある程度の操作ができるようになると思う。
逆に第5,6章は導入する環境やサービスによって実施内容が異なるので、必要になったときに後から読み返したい。