聞いたら一生の宝,プログラミングの基礎の基礎

第8回 Elasticsearchの基礎を学ぶ

この記事を読むのに必要な時間:およそ 2.5 分

サービスでの活用事例

冒頭でも紹介したとおりElasticsearchは数多くの大規模サービスで採用されています。今回は私の開発しているteratailでの活用事例を一部紹介したいと思います。

ここでは質問詳細ページの「関連した質問」について紹介します。

まず,前提として質問のタイトル・技術分類を表すタグ・本文・回答本文を1つの文書として登録しています。表示されている情報を元にタグ情報と文書を検索ワードとしてMore Like This Queryを使用し,関連した質問を取得しています。類似文書を取得する方法としてはとても手軽で便利な仕組みです。

More Like This Queryはその名の通り,類似文書検索とよばれ「文書に似たものを探す」ものです。同じ語を多く含む文書を類似文書と定義します。これにより,表示されている質問と似た質問を表示し,ユーザの解決の手助けとなるようにしています。More Like This Queryには語の最大数や出現数の下限上限などさまざまなものを指定できます。teratailでは変数名など意味は無いが出現回数が多くなりがちなデータを除外するよう設定を変更してチューニングしています。

また,More Like This Queryを利用しない方法としては,Percolatorという通常とは逆の方向に文書から該当するクエリを抽出する仕組みを用いて文書内の重要な単語を集計し,それを元に類似文書を求めたり,機械学習モデルを作成する方法もあります。プロジェクトの大きさや必要とする類似度の精度を元に適したものを選択しましょう。

主なプラグインの紹介

ElasticsearchにはElastic社が提供するさまざまなプラグインが存在します。それらを用いることにより,全文検索がより柔軟にできたり,文書の分析を行いやすくすることなどさまざまなことが可能になります。

Watcher
Watcherプラグインはアラートを検知するプラグインです。indexに登録されている文書を監視しメールやslackなど定義したものに通知を行うことができます。また,関し履歴はindexにもなっているので,それ自体を参照することも可能です。
Shield
特に認証などがないElasticsearchの認証を管理できます。また,SSL暗号化やフィールドごとの権限制御が実現できます。
Marvel
Elasticsearchのクラスタのモニタリングが行えます。これは次に紹介するkibanaの上で動作します。複数のクラスタをリアルタイムで監視することができます。
Kibana
Elasticsearchの文書をシームレスに集計しグラフィカルに表示できます。Webサーバのアクセスログなど文書として保持し,アクセス解析結果を表示する際などによく利用されます。

Elastic社が提供している以外にも日本語の形態素解析を行う独自プラグインが存在し,また自分で作成することができます。

Elasticsearch 2.0.0

本稿執筆時点(2015/11/24)でElasticsearchの最新バージョンは2.0.0です。1系は1.7.3が最新です。2.0系で追加された機能で大きなものは以下のものです。

Pipeline Aggregations
さまざまな集計を行うAggregationの結果に対する計算を行う機能
Query/Filter merging
フィルタが廃止されすべてクエリに統合されました
Core Plugin
先に紹介したプラグインが公式にサポートされ,Elasticsearchのリリースと同じタイミングでリリースされることになります

Elasticsearch 2.1.0 2.0.1

本稿執筆中(2015/11/24)に2.1.0と2.0.1がリリースされたので,こちらも簡単に紹介します。

ベースとしているLuceneのバージョンが5.2.1から5.3.1に上がり,それに対応したものを2.1.0としているため,バージョンの違いが生まれています。また,このリリースで修正されたGeo Centroid Aggregationでは,位置情報による集計結果をエリアの中心地ではなく現実に存在するポイントに設定されることになります。この機能によって,より自然な情報の出力が可能になりました。

最後に

Elasticsearchの特徴からプラグインなどを紹介してきました本稿ですが,Elasticsearchの最も優れている点は,分析の柔軟性やその速度です。とても手軽に強力な機能を導入することが可能ですし,さらにもっと高度な利用も可能です。

私自身,こういった新しいサービスの導入調査を行うことが多いのですが,いつも思うのはリリースなどを読み新しい機能を追いかけることよりも,なぜこのような機能が生まれたのかなどの思想の部分を理解することが重要だと思っています。もちろんすべてが文書として残っているわけではないので大変困難ではあります。

読んでいただいた方にエンジニアとして基礎部分を固めるために,テクニックではなく概念の理解を意識できるよう本連載を続けていけるよう励みたいと思います。

著者プロフィール

本橋佑介(もとはしゆうすけ)

レバレジーズ株式会社 teratail開発責任者。

フロントエンド,バックエンドの開発に携わりUIデザインなども担当。最近の興味はPostgreSQLとオーディオ。自作アンプ沼にはまらないように戦っている。