RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

全文検索の探求 Elasticsearch(1) プロジェクト方針およびElasticsearch概要

みなさんこんにちは。フジサワです。今回は、前回の記事でご紹介いたしました、「発の来にせん手をうつプロジェクト(通称:かみせんプロジェクト)」についての途中経過をレポートさせていただきます。

今年度のかみせんプロジェクトでは、大きく以下の2つのテーマ

  • Elasticsearch
  • データ匿名化手法

について検証を進めており、本記事ではElasticsearchの検証について記載いたします。

連載目次

SQLチューニング以外の手段を

弊社が運営しているサービスの開発では、検索処理のパフォーマンス課題に取り組むことがしばしばあり、検索要件への対応範囲を広げたいと考えています。

  1. 複数の動的カラムのデータを横断的に検索したい
  2. メールなどの大量の文章データを検索したい

など、SQLチューニングでは一筋縄ではいかないようなシーンにおいて、その他の技術的対応手段としての役割を、Elasticsearchに期待しています。

※Elasticsearchを検証対象とした詳細な経緯については、前回の記事をご覧ください。

全文検索を使える未来を手に入れる

Elasticsearchの検証を進めるにあたり、バックログの洗い出しを行いました。

チーム全員がElasticearchに関する知見がない状態からのスタートだったため、まずは以下の書籍を各自読み、Elasticsearchの概要を理解するところから始めました。

Elasticsearchについて詳しく知るための調査を開始

Elasticsearchに関する基礎的な情報や、実際に動作させてみた結果などをWikiにまとめてナレッジの蓄積を行いました。PHPで動作するサンプルプログラムを作成し、アプリケーションからのElasticsearchの利用方法の検証なども行なっています。

動作確認は、前述の書籍の他に、以下のような情報も参考にして行いました。

f:id:miracle-fjsw:20190718191811p:plain
REST APIでの検索イメージ

それでは、調査結果の一部を抜粋してご紹介いたします。

Elasticsearchの概要

  • オープンソースの分散全文検索エンジン
  • 自然言語で記述された大量の文書データの検索を高速に実行可能
    • 文書データを字句解析し、単語などに分割してインデックス化することで実現している
    • 日本語の字句解析に対応したプラグイン(Kuromoji Analysis Plugin)がある
  • Elastic社 が中心になって開発が進められている
  • 検索エンジンのコア部分はJava製の検索ライブラリApache Lucene が使用されている
  • ドキュメント型データベースで柔軟なデータ構造でデータを保存できる
    • ドキュメント型なので、非正規化した状態でデータを持つ必要がある
  • スケーラブルな構成になっており、事前に最大データ量の検討ができていれば、容易にスケールアウトすることが可能
    • データの分割単位であるシャード数を事前に定義
    • ノードを増やすと、新しく増えたノードにシャードが分配されスケールアウトできる
    • ただし、シャード数は後から変更できないため、事前に最大データ量を想定した計画が必要になる
  • トランザクションを持たない(検索・参照に特化)
  • 検索やデータの登録だけでなく、クラスタの管理やメンテナンス等の、ほぼ全ての操作が、REST APIを用いて実行できる
  • 検索だけでなく、検索結果の分類や集計なども高速に実行できる。Kibanaとの組み合わせにより、データの傾向やパターン分析などの用途でも用いられる
  • Linux, Windows, Mac等の各OSに対応しており、公式のDockerイメージなども公開されている
    • 基本動作の確認はDockerコンテナ上で実施

Elasticsearchの活用事例

Elascticsearchの活用事例は、Elastic社の公式ページに多数掲載されています。 ここでは、いくつか特徴的な用途で使用している事例を抜粋いたします。

f:id:miracle-fjsw:20190717212429j:plain
かみせんElasticsearch検証チームの様子

開発の未来に先手を打つための議論へ

Elasticsearchの概要や機能の理解を経た後、今後どのような検証を行うべきかを、チーム内で議論しました。 その際、キーとなったのは、以下のポイント。

  • 「Elasticsearchを調査・検証することで得られるMinimum Valueとはなにか?」

そして、私たちが得た結論は、

  • 『検索機能を有する新規サービスのアーキテクチャ検討段階で、RDBだけでなくElasticseachが比較検討材料として挙がる状態を作る』

となりました。

「比較検討材料として挙がる状態を作る」ために、Elasticsearchの得意分野である、自然言語で記述された文字列データを持つ、大量データを対象にした検索パフォーマンスを検証を行い、RDBとの比較を行うことにしました。

f:id:miracle-fjsw:20190716205158j:plain
Minimum Valueの検討風景
※この画像は議論の途中経過のもので、最終的に至った結論ではありません

SQLチューニングでは解決できない検索要件が生まれる未来に先手を打つための調査と検証に着手

現在、Minumum Valueをアウトプットすべく、Elasticsearchのパフォーマンス検証を行っています。

サーバーのスペック(メモリやノード数など)による変化や検索クエリの当て方など、どのような観点で検証を行うべきかについても議論をしながら進めています。 次回は、検証結果についてレポートさせて頂く予定です。

連載目次

Copyright © RAKUS Co., Ltd. All rights reserved.