先日、当社のシステムチームが「Elasticsearch」の概要と活用方法を共有することを目的とした社内勉強会を行いました。今回の記事では、その時の様子を少しだけご紹介いたします。
「Elasticsearch」とは、Elastic社が開発しているJavaで書かれた全文検索エンジンのことです。リアルタイムデータ分析、ログ解析、全文検索などの様々な分析が可能で、大量のドキュメントから目的の単語を含むドキュメントを高速で抽出することができます。当社が運営する音楽クリエイター向けダウンロードストア「SONICWIRE(ソニックワイヤ)」で実際に導入しているエンジンで、同ストアのシステムまわりを担当しているエンジニアが勉強会の講師役を務めました。
講師役がまとめた「Elasticsearch」の特徴は、下記の通りです。
- 分散型アーキテクチャ
- データを複数のサーバーに分散させることで、検索と書き込みの速度が向上する。
- サーバーがダウンしてもデータの損失やサービスの中断が最小限に抑えられる。
- REST APIのシンプルさ
- HTTPリクエストを使用してデータの検索・追加・更新が可能。
- ドキュメント指向の柔軟性
- JSON形式でデータを保存・検索できるため、柔軟で扱いやすい。
- 多様な関連ソフトウェアとの連携
- 関連するソフトウェアと組み合わせることで、ログ収集や可視化などの幅広い用途に適用できる。
また、勉強会では「Elasticsearch」を理解するにあたって知っておいた方がよい基本的な用語の説明も行われました。
ドキュメント | 「Elasticsearch」に格納する1つの文章の単位。RDSだと「レコード」。 |
フィールド | ドキュメント内の項目名(key)および値(value)の組。RDSだと「カラム」。 |
インデックス | ドキュメントの保存場所。DRSだと「データベース」。 |
ノード | 「Elasticsearch」が動作する各サーバのこと。 |
クラスタ | 複数のノードを起動すると、お互いにメッセージを送信しあい、自律的にノードのグループを形成できる。このグループのことをクラスタと呼ぶ。 |
シャード | 「Elasticsearch」ではインデックスのデータを一定数に分割して異なるノードで分散保持することにより、検索性能をスケールできる仕組みをもっている。この分割した各部分のことをシャードと呼ぶ。 |
レプリカ | シャードまたはノードの可用性を高めるために、各シャードは自動的に複製される仕組みがある。この複製のことをレプリカと呼ぶ。 |
「SONICWIRE」は世界最大規模の「音」に関するダウンロードストアであるため、ユーザーが1,000万件超のサウンド素材の中から求めている「音」を探し出しやすい仕様にする必要があります。そのため、他のソリューションと比較しても圧倒的なスピードで全文検索が可能な「Elasticsearch」は、ユーザーエクスペリエンスの向上に繋がっています。
勉強会では「SONICWIRE」での実装例を具体的なクエリを紹介しながら解説する時間もあり、講師役の説明に合わせてユーザー目線で検索時の使用感を確かめる参加者もいました。
勉強会の最後には質疑応答の時間が設けられ、オンラインで勉強会に参加していた社員たちもカメラをONにして積極的に質問していました。講師役が受け答えするだけでなく、すでに「Elasticsearch」を導入済みのWEBサイトを担当しているエンジニアと、これから自身の担当WEBサイトに導入したいと考えているエンジニアの間で活発な意見交換が行われるなど、参加者全員にとって有益な情報交換の時間となっていました。
当社システムチームは今後も技術の習得とブラッシュアップを重ね、ユーザーエクスペリエンスを向上させられるようなシステム構築を目指してまいります。ぜひ、今後の活躍にもご注目ください。