分散型でオープンソースの検索・分析エンジン、Elasticsearch。
最近、興味がある、これから業務で使う予定、なんて人もいるのではないでしょうか。
そんな時は、
を見ておけばオッケ~!!
・・・といえば(公式のだし)間違いなくそうなんですが、
- とっかかりが英語だとハードルが高い
- とりあえず要点だけ把握してガンガン使ってみたい
となる人も多いと思うので、入門者向けにいい感じの記事をピックアップ&実際に動かしてみることを想定して、まとめてみました。
前提条件
- OS:Windows10
- プログラミング言語:Java
環境作って実際に動かしてみる、というところに重きを置いてます。
自分のメイン環境、言語が上述の通りなのでその点はご堪忍。
それ以外の環境の人は、「本題」の3, 4辺りを参考程度にご覧くださいませ。
※一部公式サイト参照(=英語)しておりますが、ご了承を。
本題
1. curlのダウンロードと設定
サーバとデータをやりとりするためのツール、curl。
Elasticsearchやのに、なんでイチバンにcurlやねんっ!ってなりそうですが、コマンドベースで操作を行うには必須。
で、Windowsには、残念ながらデフォルトではcurlは入ってない。
ダウンロードが必要なわけです。
より、ダウンロード→解凍して、binフォルダまでのパスを環境変数(ユーザー環境変数)に設定しておきましょう。
そして、コマンドプロンプトで、以下のコマンドを実行して、日本語でも文字化けないようにしておきましょう。
> chcp 65001
curlがそもそもよくわからへんから、基本的な使い方を押さえておきたい、という方は、
がとても参考になりますので、一読しておくとよいでしょう。
2. Elasticsearch(とKibana)環境の準備
ではいよいよ、Elasticsearch環境を構築していきましょう!
Kibanaはなくてもいいのですが、
- Elasticsearchの操作を簡単にしたり、
- データを可視化したりできる
便利なツールなのでぜひこちらも入れておきましょう。
を参考にすればWindowsでの環境が準備できちゃいます♪
・・なんですが、ダウンロードにめっっっちゃ!!!時間がかかる(自分は3.5時間ほどかかった:Kibanaはそれほどでもない)ので、Dockerまあまあ使えるよって人は
- 初めてのElasticsearch with Docker | Qiita
- Elasticsearch + KibanaをDocker Composeで動かす | Qiita
- Dockerコンテナ上のElasticsearchのデータを永続化する | Qiita
あたりを参考にサクッと環境構築してしまってもよいですね。
(こちらは設定内容の見直し込みでも1時間かかりませんでした。)
公式サイトだと、
に記載がありますので、こちらもご参考に。
3. 基本的な概念を理解する
それでは!早速動かしてみましょう!
と、その前に、基本的な概念を理解しておくのが大切ですね。
そもそも、環境うんぬんの前にまずそこやろ~っていうのは置いておいて、最低限押さえておきたい内容を以下に。
よく出てくる用語については、RDBと比較するとイメージがつきやすいと思います。
調べると諸説でてきますが、一番しっくりきた組み合わせが以下の通り。
RDB | Elasticsearch |
---|---|
データベース | Cluster |
テーブル | Index |
テーブル定義 | Mapping |
レコード(行) | Document |
カラム(列) | Fields |
プライマリーキー(主キー) | Document ID |
もちろん異なる部分もあるので、詳しくは
をご覧ください。
続いて、analyzer。
analyzerとは、テキスト分析といって、検索するのに最適なフォーマットに変換するプロセスを行ってくれるものになります。
analyzerは、大きく分けて以下の3つから構成されています。
名称 | 内容 |
---|---|
Character filters | 文字列に対し、Tokenizerで分割する前に必要な処理(追加、削除、変更)を行う。 前処理的ポジションで、使用は任意。 |
Tokenizer | 文字列を単語レベルに分割する役割を持つ。 必須項目。 |
Token filters | Tokenizerで分割された内容に対し、必要な処理(追加、削除、変更)を行う。 後処理的ポジションで、使用は任意。 |
公式サイトでは、
に記載がありますので一度確認しておきましょう。
最後に、aggregations。
検索クエリに基づいて、データを集計します。
公式サイトの
辺りを参考に。
4. コマンドベースで動かしてみよう
ではいよいよ、Elasticsearchを操作してみましょう~!
全般的な内容については、
あたりを参考に。
SQLとの比較、という観点では、
あたりがとてもわかりやすくまとまってます♪
まずは上記の記事たちを参考に、コマンドベースで、
- インデックスの作成
- データ投入&更新
- クエリ実行
あたりを一通りやってみるとよいですね。
余力があれば、analyzer, aggregationsについても一通りやっておくとよいでしょう。
analyzer(日本語使用)については、
- Elasticsearchで、分かち書き(kuromoji:形態素解析)したqueryを_searchする。 | Qiita
- Elasticsearchを日本語で使う設定のまとめ | Qiita
- 【elasticsearch】Kuromojiとngramで検索精度を上げてみる | Qiita
あたりを参考に。
aggregationsについては、
- ElasticsearchのAggregationsを利用したファセットの実現 | Qiita
- Elasticsearchの"Aggregations"を使って SQLの"Group by"を置き換える | Qiita
辺りが参考になります。
5. プログラミング言語(Java)で動かしてみよう
プログラミング言語を使っても操作できます!
によれば、ElasticsearchはJava、JavaScript、Go、.NET、PHP、Perl、Python、Rubyと8種類ものプログラミング言語に対応している、とのことなんですが、冒頭でも述べた通り自身のメイン環境がJavaなので、今回はJavaで。
日本語記事なら、
がとてもよくまとまってます。
本家本元のトップページは以下。
うち個人的にココは押さえておきたいなと思ったのが以下のページ。
-
Building Queries | Elastic
→ コマンドベースでのクエリと比較されてて、わかりやすい!
こちらも実際にコードを書いてみて、動きを見てみるのがいいですね。
所感
最初はとっつきにくく、Elasticsearchコノヤロー!!ってなっていたのですが、使っていくうちに随分理解ができてきて、愛着がわくようになってきました。
カスタマイズの幅が大きく、育てがいがありそうなのもいいところ。
自分自身もこの記事執筆時点の2020/09/03の時点で触り始めて約2週間。
まだまだこれからですが、習うより慣れろ、で進めていきたいと思います!
更新履歴
日付 | 内容 |
---|---|
2020/09/03 | 初版投稿 |
2020/09/04 | analyzer, aggregationsに関する内容を追加 |
参考
本文には載せてないけど、大いに参考にさせていただいた記事たちです。