Elasticsearchとは?
Elasticsearchは、Apache Luceneライブラリの上に構築された分散型のオープンソース検索および分析エンジンです。Elasticsearchはベクトル検索やリトリーバル強化生成(RAG)も提供しており、現代のAIアプリケーションをシームレスにサポートします。アプリケーションは、定義されたスキーマがある場合でもない場合でも、JSONペイロードをElasticsearchクラスターに送信することで、構造化データと非構造化データをElasticsearchに保存できます。
Elasticsearchアーキテクチャ
Elasticsearchクラスターの主要なコンポーネントは次のとおりです:
ドキュメント
ドキュメントはElasticsearchによって保存される最小の情報記録であり、JSONとして表現されます。ドキュメントは異なるタイプの複数のフィールド(キーと値のペア)で構成され、予め定義されたスキーマを持つか、スキーマなしで、新しいフィールドがインデックスされる際のデータタイプを推測します。
インデックス
インデックスは、同じスキーマを持つドキュメントの論理コレクションであり、インデックス名によって識別されます。
シャード
Elasticsearchのインデックスは、シャードと呼ばれる管理可能な単位に分割され、これはドキュメントのコレクションです。シャードは検索の基本単位であり、冗長性とフォールトトレランスのために複数のノードに複製されます。
ノード
ノードは Elasticsearch の独立したインスタンスであり、1つまたは複数のインデックスに属するシャードのコレクションを管理します。ノードにはデータノード、マスターノード、インジェストノードなど、異なる役割があります。
クラスタ
Elasticsearch クラスタは、相互に接続されたノードのコレクションです。クラスタ内のすべてのノードはクライアントからのリクエストを処理し、お互いに通信します。クラスタ内の各ノードは、インデックスに属するシャードのサブセットを所有しています。
クエリアーキテクチャ
次のアーキテクチャ図は、検索リクエストのフローを示しています:
- ユーザーまたはアプリケーションが検索クエリを作成します。クエリはクラスタ内の任意のノードで処理できます。リクエストを処理するノードは「調整」ノードです。
- 調整ノードはクエリを関与するすべてのシャードとそのレプリカにブロードキャストします。
- 各シャードはクエリをローカルで実行し、軽量な結果セットを調整ノードに返します。
- 調整ノードは受け取った結果をマージします。これが「クエリ」フェーズの終わりです。クエリフェーズは検索結果を形成する基本的なドキュメントを特定しますが、まだ完全なドキュメントを取得する必要があります。
- 調整ノードは所有シャードにフェッチリクエストを送信し、結果セットのドキュメントをエンリッチします。
- エンリッチされたドキュメントは調整ノードに返されます。
- ランク付けされたエンリッチされた完全な検索結果セットが呼び出し元に返されます。
インデックスアーキテクチャ
次のアーキテクチャ図はインデックスリクエストのフローを概説しています。
- ユーザーはElasticsearchにインデックスするためのJSONドキュメントを送信します。ドキュメントがすでに存在する場合、新しいフィールドが追加され、既存のフィールドが上書きされます。リクエストを最初に受け取るノードは「coordinating」ノードです。
- 協調ノードは、着信ドキュメントのプライマリシャードを特定し、通常はドキュメントIDに基づいています。そして、リクエストをプライマリシャードを所有するデータノードに転送します。
- プライマリシャードは操作を検証し、ローカルで実行します。
- その後、プライマリシャードはすべてのレプリカに操作を並行して転送します。
- レプリカシャードは操作を各ノードでローカルに適用します。
- ステップ6、7、8では、書き込みの確認がレプリカシャードからプライマリシャード、協調ノード、呼び出し元に伝わることを示しています。
結論
この記事では、Elasticsearchクラスターのさまざまなコンポーネントであるドキュメント、インデックス、シャード、ノードについて説明しています。また、検索リクエストとインデックスリクエストの寿命について概説しています。柔軟なアーキテクチャにより、クラスターのスケーリング時にノードの追加と削除が容易に行えます。スキーマレスのインデックス作成やAI検索機能のサポートなどの機能と組み合わせることで、Elasticsearchはリアルタイムで大容量のデータを効率的に保存、検索、分析する必要がある組織にとって事実上の標準となっています。
Source:
https://dzone.com/articles/elasticsearch-query-and-indexing-architecture