elasticserchの基本要素についてざっくりまとめてみる

2月 12, 2022

どもども。本格的な夏服不足に苦しむsaisaiです。


本日はelasticserch学習記第一弾ということで全文検索についてのことやelasticserchの基本的な構成要素を軽くまとめて、elasticserchの全体をざっくり把握しようの記事です。


実はここ最近elasticserchを使用するかもという機会がありまして、結局そのときは使用を断念したのですが触っているうちに今後必ず必要になってくるサービスだなと実感したので、本腰を入れて勉強しようと思った次第であります!


目指せelasticserchマスター!!

そもそもelasticserchとは

elasticserchは端的に言うと索引型検索を使用する全文検索ソフトウェアです。


全文検索とはその名の通り文書の全文を対象とする検索方法です。しかし、素直に全文を検索していては膨大な文章量に対応できません。そこでelasticserchは索引型検索を使用して効率よく全文検索を行います。


索引型検索とは"特定の文字列を含む文書"を探し出すことを可能にする検索方法です。たとえば、

白い夏服が安い洋服店
今季夏服のトレンド

という文章があったとします。これらの文章を検索したいと思った時、それぞれを全文検索することは効率的ではありません。


索引型検索ではまず、一定のアルゴリズムをもとに

白い 夏服 (が) 安い 洋服店
今季 夏服 (の) トレンド

のように要素分解します。アルゴリズムによっては助詞を排除してくれます。


さらにここで各要素を転置インデックスと呼ばれる索引に格納していきます。すると、例えば「夏服」と検索すれば両方の文章がヒットしますし、「夏服」「トレンド」のように検索すると下の方の文章のみヒットするといった検索方法を確立できます。


elasticserchはこの検索方法を採用している検索ソフトウェアということになります。

全文検索の基本要素

次に、全文検索の仕組みをさらに理解する上で押さえておきたい3つの要素をまとめておきます。

・インデクサ
文章からキーワードを抽出してインデックスのデータベースを構成してくれます。

・サーチャー
インデックスに基づいた検索クエリ機能を提供します。

・クローラー
検索対象(サイトなど)からドキュメントを収集します。収集したドキュメントはインデクサに引き継がれます。


どれも全文検索のそもそもの流れを理解するのに重要な要素なのでしっかり押さえておきたいですね!

elasticserchの構成要素

全文検索に関する大まかな要素は一通り学べました。ここからはelasticserchの構成要素についてみていきたいと思います。


・ドキュメント
elasticserchに格納する文書の1単位です。JSON形式で格納されます。
インデックスの格納及び検索はこのドキュメント単位で行われます。elasticserch内部で管理できるよう各ドキュメントにはそれぞれIDが割り振られています。


・フィールド
ドキュメント内のkey:valueを指します。ドキュメントはJSON形式であるため、その内容はkey:value形式で定義されています。検索はドキュメントからこのフィールドを対象にとって実施されます。

フィールドにはいくつかのデータ型があり、そのデータ型に応じた要素をフィールド内に格納できます。

代表的なデータ型としていくつか紹介しておきます。

text型・・・文字列を格納することができます。また、格納内容を要素分析しインデックスに格納できます。
keyword型・・・こちらも文字列を格納するデータ型ですが、"完全一致"用として使用できます。
long,short,integer,float型・・・数値を格納できます。
date型・・・日付を格納できます。
boolean・・・真偽を格納できます。
object型・・・ネスト構造を格納できます。valueに対してJSONオブジェクトを指定する際などに使用します。
array型・・・配列を格納できます。


・インデックス
ドキュメントを格納する場所です。たたし、アナライザによって要素分解されたり、転置インデックスを作成していたりと検索最適化された状態で格納されます。

インデックスはシャード単位で分けられ、複数ノードに格納されます。


・ドキュメントタイプ

ドキュメントタイプはドキュメントがどのようなフィールドやデータ型で構成されているかを構造化したものです。RDBSでいうとことのスキーマにあたるものかと思います。


・マッピング
ドキュメントタイプをより具体化に定義するものです。実際にドキュメントをelasticserchに格納する際には、ドキュメントタイプを設定(マッピングする)する必要がありますが、elasticserchでは格納されるドキュメントのフィールドに応じて自動的にこの作業を行ってくれるので、必ずしも必要なものではなさそうです。

elasticserchを稼働する物理的要素について

elasticserchのシステム的な要素としては一通りまとめることができました。


次にelasticserchを稼働させるための物理的要素についてみていきましょう。


・ノード
elasticserchが稼働する各サーバを指します。一つのサーバに複数ノードを稼働させることも可能ですので、必ずしも1ノード=1サーバとは限りません。また、各ノードにはそれぞれのノード名を付与する必要があります。

ノードには種類があり、それぞれ働きが異なるのでこちらもざっくり紹介しておきます。

Masterノード・・・クラスタを管理するノードです。
Dataノード・・・データ格納やクエリ処理、リクエストのハンドリングを行うノードです。
ingestノード・・・データ変換や加工を行います。
coordinatingノード・・・クライアントからのリクエストハンドリングに特化したノードです。


・クラスタ
elasticserchを稼働する複数ノードのグループです。クラスタにもまたクラスタ名を付与する必要があります。同じクラスタ名のクラスタは同一クラスタを形成します。


・シャード
インデックスのデータを分割したものです。シャードは異なるノードに分散保存することで検索機能を向上させます。

シャード数はインデックス作成時に設定しておく必要があり、後から増やすことはできない点に注意が必要です。


・レプリカ
シャードを複製したものです。複製元をプライマリ、複製したものをレプリカと呼びます。

シャードへのデータ反映はプライマリ、レプリカの順で行われます。

また、elasticserchにはプライマリとレプリカのシャードを自動的にことなるノードに格納する機能があります。この機能を利用することでノード障害に対応できる冗長構成を取ることができます。例えばもしプライマリが失われても、レプリカがプライマリに昇格するので対障害性に優れた構成になると言えます。

また、レプリカが存在することで検索性能の向上にもつながります。

まとめ

以上がelasticserchに関する概要と基本要素の紹介でした。


elasticserchの基本要素をしっかり把握できたように思います。各要素を階層立てて上から順番に理解していくのが良さそうですね!


実際にdockerなどでelasticserchを立ち上げて遊んでみたいと思います。


以上、最後まで読んでいただきありがとうございました!


↓オススメ教材

ElasticSerch

Posted by CY