みなさんこんにちは。フジサワです。今回は、前回の記事でご紹介いたしました、「
今年度のかみせんプロジェクトでは、大きく以下の2つのテーマ
- Elasticsearch
- データ匿名化手法
について検証を進めており、本記事ではElasticsearchの検証について記載いたします。
連載目次
- 『全文検索 〜 Elasticsearchとデータ匿名化手法』
- 『全文検索の探求 Elasticsearch(1) 』: プロジェクト方針およびElasticsearch概要 ←今読んでいる記事
- 大量データを検索するサービスでElasticsearchはRDBの代替候補になりうるか?(Elasticsearch vs pg_bigm)』
- データ匿名化 第1回:匿名化された個人情報とは何なのか
- データ匿名化 第2回:個人情報は匿名化しても意味がないのではないか?
- データ匿名化 第3回:個人情報を匿名化するプロセス
- データ匿名化 第4回:匿名化のために行うデータ項目の一般化とは
- データ匿名化 第5回:データ匿名化の指標
- データ匿名化 第6回:実際の匿名化
SQLチューニング以外の手段を
弊社が運営しているサービスの開発では、検索処理のパフォーマンス課題に取り組むことがしばしばあり、検索要件への対応範囲を広げたいと考えています。
- 複数の動的カラムのデータを横断的に検索したい
- メールなどの大量の文章データを検索したい
など、SQLチューニングでは一筋縄ではいかないようなシーンにおいて、その他の技術的対応手段としての役割を、Elasticsearchに期待しています。
※Elasticsearchを検証対象とした詳細な経緯については、前回の記事をご覧ください。
全文検索を使える未来を手に入れる
Elasticsearchの検証を進めるにあたり、バックログの洗い出しを行いました。
チーム全員がElasticearchに関する知見がない状態からのスタートだったため、まずは以下の書籍を各自読み、Elasticsearchの概要を理解するところから始めました。
Elasticsearchについて詳しく知るための調査を開始
Elasticsearchに関する基礎的な情報や、実際に動作させてみた結果などをWikiにまとめてナレッジの蓄積を行いました。PHPで動作するサンプルプログラムを作成し、アプリケーションからのElasticsearchの利用方法の検証なども行なっています。
動作確認は、前述の書籍の他に、以下のような情報も参考にして行いました。
- Elasticsearc 公式リファレンス
- 基本的なAPIの使い方などは、公式リファレンスをなぞって動作確認しました。
- 国立情報学研究所作成のGithubリポジトリ
- Elasticsearchに関して、一通り凝縮してまとめられています。

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

開発の未来に先手を打つための議論へ
Elasticsearchの概要や機能の理解を経た後、今後どのような検証を行うべきかを、チーム内で議論しました。 その際、キーとなったのは、以下のポイント。
- 「Elasticsearchを調査・検証することで得られるMinimum Valueとはなにか?」
そして、私たちが得た結論は、
となりました。
「比較検討材料として挙がる状態を作る」ために、Elasticsearchの得意分野である、自然言語で記述された文字列データを持つ、大量データを対象にした検索パフォーマンスを検証を行い、RDBとの比較を行うことにしました。

SQLチューニングでは解決できない検索要件が生まれる未来に先手を打つための調査と検証に着手
現在、Minumum Valueをアウトプットすべく、Elasticsearchのパフォーマンス検証を行っています。
検証対象のデータには、Wikipediaの日本語版全データを採用。
- 検証開始時点のでドキュメント数:2,339,123 件
下記の環境にストアして検証を実施中
- Elasticsearch:Amazon Elasticsearch Service
- RDB:Amazon RDS for PostgreSQL
サーバーのスペック(メモリやノード数など)による変化や検索クエリの当て方など、どのような観点で検証を行うべきかについても議論をしながら進めています。 次回は、検証結果についてレポートさせて頂く予定です。
連載目次
- 『全文検索 〜 Elasticsearchとデータ匿名化手法』
- 『全文検索の探求 Elasticsearch(1) 』: プロジェクト方針およびElasticsearch概要 ←今読んでいる記事
- 大量データを検索するサービスでElasticsearchはRDBの代替候補になりうるか?(Elasticsearch vs pg_bigm)』
- データ匿名化 第1回:匿名化された個人情報とは何なのか
- データ匿名化 第2回:個人情報は匿名化しても意味がないのではないか?
- データ匿名化 第3回:個人情報を匿名化するプロセス
- データ匿名化 第4回:匿名化のために行うデータ項目の一般化とは
- データ匿名化 第5回:データ匿名化の指標
- データ匿名化 第6回:実際の匿名化