![Elasticsearch株式会社 マーケティング部 テクニカル プロダクトマーケティング マネジャー 鈴木章太郎氏](http://cz-cdn.shoeisha.jp/static/images/article/13702/13702_001.png)
Elasticsearchが解決する課題とは何か?
システムのデータを格納する目的で、リレーショナルデータベース(以下、RDB)が使⽤されることは多い。しかし、RDBには欠点がある。システム運用の長期化によりテーブルが肥⼤化して数百万のデータセットを含む状態になると、検索のパフォーマンスが著しく劣化してしまうのだ。この課題を解決するためにスキーマ分割やテーブル分割などの施策が行われるケースはあるものの、RDBの根本的な問題が解消されるわけではない。
Elasticsearchはこうした課題を解決できる、柔軟で強力かつオープンでフリーな分散型リアルタイム検索および分析エンジンである。Elasticsearchはドキュメントベースのデータベースであり、データをJSON形式(⾮正規化された状態)で保存する。Elasticsearchを用いれば、たとえ数百万、数千万という量のデータであっても数秒ほどで簡単に検索できる。
また、検索処理の高速性だけではなく日本語サジェスト機能の優秀性もElasticsearchの利点だ。
<日本語サジェストの機能概要>
・ユーザーが検索キーワードを入力すると、関連する候補が表示される。
例:「日本」と入力すると「日本」「日本 地図」「日本 人口」などが提案される。
・不完全な検索キーワードを入力した場合でも、関連する候補が表示される。
例:「にほn」と入力すると「日本」「日本 地図」「日本の人口」などが提案される。
・タイプミスした場合でも、意味の通る候補が提案される。
例:「に hん」「にっほん」「日本ん」と入力すると「日本」「日本 地図」「日本の人口」などが表示される。
・候補となる単語が、キーワードが検索された回数が多い順に一覧表示される。
3 Solutions, 1 Stack, Deploy Anywhere
鈴木氏は次に、Elastic社が提供する3つのソリューションやElastic Stack、多様なデプロイ選択肢について解説していった。
![Elasticが提供する3つのソリューションやElastic Stack、多様なデプロイ選択肢の概要図](http://cz-cdn.shoeisha.jp/static/images/article/13702/13702_002.png)
Elastic StackはElasticsearchやKibana、Beats、Logstashから構成されるElasticのコアプロダクト群だ。Elasticsearchは前述の通り分散型リアルタイム検索および分析エンジンである。KibanaはElasticsearchのデータを可視化・分析するためのツールだ。棒グラフや円グラフなどさまざまな形式でデータを描画できる。
Beatsは軽量なデータシッパーであり、各種システムからログデータなどを取得してElasticsearchに投入する役割を果たす。Logstashは強力なETLツールで、他のデータベースに格納されている大量のデータをすべてElasticsearchに投入するなどのユースケースで威力を発揮する。
こうしたElastic Stackの技術をベースとして、Elastic社は「Elasticエンタープライズサーチ」「Elasticオブザーバビリティ」「Elasticセキュリティ」といった3つのソリューションを提供している。
さらに、これらのソリューションのデプロイ選択肢も豊富だ。AWSやAzure、GCPといったパブリッククラウド環境にElasticをデプロイするためのElastic Cloud。物理ハードウェアや仮想環境、パブリッククラウド、プライベートクラウド、それらのハイブリッドなど多種多様な環境にデプロイできるElastic Cloud Enterprise。Kubernetes環境上にElasticをデプロイできるElastic Cloud on Kubernetesなどが用意されている。
Elasticを活用して、より良いアプリ開発を実現するために
セッション後半で、鈴木氏はデモアプリを活用しながらElastic Cloudの概要を紹介していった。デモアプリとして例示されたのはECサイトだ。フリーワード検索や件数集計、タグなどによる絞り込み、ソート、ページング、サジェスト、ハイライトといった機能をElastic Cloudによって実現できることを鈴木氏は説明した。デモアプリのアーキテクチャ全体像は下図の通りである。
![デモアプリのアーキテクチャ全体像](http://cz-cdn.shoeisha.jp/static/images/article/13702/13702_003.png)
さらにセッション内では、Elasticsearchに関連した機能開発に役立つ、生産性を向上させるツールについても解説された。
まずは「Elasticsearch for VSCode」だ。これはElasticsearch APIをVSCodeから呼び出すための拡張機能でここからインストールできる。この拡張機能を使うことで、Elasticsearch APIを利用する際にcurlコマンドなどをたたく必要がなくなりVSCode上だけで操作が完結するため、開発効率化に大きく寄与してくれる。
また、.NET用クライアントライブラリとして「Elasticsearch.NET」や「NEST」も紹介された。「Elasticsearch.Net」はlow levelなクライアントライブラリであり、かつ他ライブラリとの依存関係がない。「NEST」はhigh levelなクライアントライブラリで、すべてのリクエスト・レスポンスを特定の型としてマッピングする。また、「NEST」にはElasticsearchのクエリDSLと1対1でひもづけられるクエリDSLが付属している。
両ライブラリはNuGetパッケージマネージャーより以下のコマンドでインストール可能だ。
Install-Package Elasticsearch.Net Install-Package NEST
さらに、Elasticsearchに保管したデータを手軽に取り扱えるフロントエンドUIコンポーネントとして「Reactivesearch」も紹介された。
アプリケーション開発において「利便性の高い検索機能をユーザーに提供すること」「データを集計・可視化してサービスの改善に役立てること」は重要だ。その目的を実現するための手段として、Elasticの各種プロダクトが有益であることが伝わるセッションとなった。