以前少しだけElasticsearchを触った時に、自分流Elasticsearch入門 - $shibayu36->blog; というElasticsearchに入門した時のメモをまとめていた。しかし、その頃はElasticsearchを使って完全に一人で一つの機能を作るというところまではいけなかった。
最近になってまたElasticsearchを一から導入する仕事をすることになった。この時以前自分がまとめた記事を読みながらやっていたのだが、実践で一から導入するためにはこの記事だけでは知識が足りなかった。
そこで、前の記事の知識をベースに、一から導入するために少しずつ学んでいき、自分のブログにまとめるなどのことをしてきたので、今回はその締めくくりとして、知識ゼロからElasticsearchを使えるようになるために学習したことについて書いておきたいと思う。
今回書くこと・書かないこと
今回はアプリケーションエンジニアが、アプリケーションの機能をElasticsearchを使って作れるようになるための知識について書く。
逆にインフラの知識については書かない。それは僕がElasticsearchの運用について担当しなかったため。インフラのことは誰か書いて欲しい。
Elasticsearchの概念を学ぶ
Elasticsearchには非常に多くの概念がある。例えば、クラスタ・ノード・インデックス・タイプ・ドキュメントの関係とは何かや、マッピングやアナライザとは何か、クエリとフィルタの違いは何かなどだ。この辺りを理解しないと使えないので、まずそれを再度勉強しなおした。
この時に一番参考になったブログは以下のブログ。
この記事はElasticsearchを始めようと思った時に最初に見るチュートリアルとして最適だ。これを読むだけで、先ほど書いた概念や簡単な使い方などを学ぶことが出来る。僕は今回もう一度Elasticsearchを使うにあたって、まずこの記事を読み返してから始めた。
また他にも@johtaniさんが最近発表されていた次のプレゼン資料が簡単な概念や使い方を追いかけるのに参考になった。
全文検索技術の基本を知る
Elasticsearchの概念を知ったとしても、全文検索の基本も知っておかないとうまくElasticsearchを使いこなせない。そこで再度全文検索の基本を学び直した。
参考になったのは先ほどの「Elasticsearchの始め方」の資料だ。この53ページ目辺りから始まる「全文検索とは?」の部分の解説が非常に分かりやすい。この資料から、全文検索の基本の考え方やN-gram、形態素解析などについて学ぶことができた。
他にも正規化やストップワードといった概念もある。こちらについては次の資料が参考になった。
また、自分なりに全文検索の技術をシンプルに理解しようと次の記事をまとめた。こちらも参考になると嬉しい。
実践の知識を学ぶ
さて、ここまでは以前Elasticsearchを使っていた時にも学んでいた。しかし今回実際に使ってみようとすると、実践するための知識が全く足りなかった。
実践で使うためには少なくとも次のことをしなければならない。
- インデックス定義を設計する
- 作ったインデックスに対してドキュメントの作成をする
- 作ったドキュメントを検索する
これらが出来るようにインデックス定義の設計、ドキュメントの作成・更新・削除処理、検索APIやQuery DSLなどを学ぶ必要があった。
インデックス定義の設計を学ぶ
インデックス定義の設計については、いろいろ調べて、自分なりにどのような手順で設計すれば良いかまとめた。以下の記事が参考になると嬉しい。
また、最初に紹介したElasticsearchチュートリアル - 不可視点 がインデックス定義の設計の実践にもなっているので参考になる。
ドキュメントの作成・更新・削除処理
インデックスの定義ができたら、続いてそれに対してドキュメントを作成などをする必要がある。そこでドキュメントの作成・更新・削除処理について学んだ。
Search APIやQuery DSLを学ぶ
ドキュメントの作成ができたら、あとは検索をどのようにすれば良いか学ぶだけだ。検索をするにはSearch APIやQuery DSLを学ぶ必要がある。
Search APIの基本的な使い方についてはそこまで難しくない。次のSearch APIに関する公式ドキュメントを読んでおけば簡単に理解が出来る。
問題はSearch APIに指定するQuery DSLだ。指定できるQuery DSLが膨大にあるので、何から学んだら良いか分からない状態になってしまう。
英語のドキュメントであれば、The Definitive GuideのFull-Body Searchの章を読むのが良さそうだった。
日本語の方は、
- 今日のElasticsearch学び Vol.3 - クエリ編 - $shibayu36->blog;
- 僕がメモしたもので、Query DSLの重要なものの説明を軽く書いている
- Elasticsearchのbool queryを利用してAND OR NOTを書いてみる - Qiita
- Boolクエリを使ったAND, OR, NOT条件の作り方が書いてある
あたりが参考になるだろう。本当は入門としてSQLとメインのQuery DSLの対比がまとまっている資料があればわかりやすいのだけど、そのようなものがなかったので残念。
他にも検索するときは、ソートをどのようにするかも重要である。これは公式のRequest body search | Elasticsearch Guide [8.0] | Elastic を読めば大体分かるだろう。また、何度も参照するが、一番最初に紹介したElasticsearchチュートリアル - 不可視点 もわかりやすい。
Elasticsearchの公式ドキュメントの引き方を学ぶ
ここまで来たらとりあえず実践でElasticsearchを使えるようにはなっていると思う。あとは自分のやりたいことに応じて必要なことを学んでいけばよいだろう。必要なことを学ぶにはやはり公式のドキュメントを見るのが一番なので、最後に公式のドキュメントの引き方を学ぶと良い。
ドキュメントの引き方を学ぶには、Elasticsearchの実践の記事を読み、少しでもわからないことがあれば分かるまで公式のドキュメントを引くということをやるのが良い。例えば次の資料を読みながら、分からないところを全部公式のドキュメントから調べてみると、大体公式のドキュメントの引き方が分かる。
まとめ
今回は最近自分がずっとElasticsearchを勉強していた締めくくりとして、アプリケーションエンジニアが知識ゼロからElasticsearchを使えるようになるために勉強したことについてまとめてみた。Elasticsearchは覚えなければならないことが非常に多い一方で、日本語で体系的に教えてくれる資料がないので、この記事が参考になれば嬉しい。
またこれまでずっとElasticsearchについて勉強してまとめていたことは、 http://blog.shibayu36.org/archive/category/elasticsearch に書いてあるので、こちらも参考になれば。
2016/09/05 15:25 更新
@johtaniさんからスライドが大分古いので新しい方を参照したほうが良い、という指摘をもらったので、新しい方のスライドに変更し、若干の調整を加えました。