【えらすてぃっくさーち】

Elasticsearch とは?

最終更新:
💡 大量データをすばやく検索するための「索引システム」

大量のドキュメントを全文検索・分析できる分散型の検索エンジン。データをJSONドキュメントとして保存し、ログ分析・商品検索・地理情報検索などに使われる。

📌 このページのポイント
Elasticsearch:全文検索の仕組み ドキュメント "東京でラーメンを食べた" "大阪のラーメン店" "東京の寿司ガイド" 索引作成 転置インデックス "東京" → Doc1, Doc3 "ラーメン" → Doc1, Doc2 "大阪" → Doc2 "寿司" → Doc3 検索クエリ 🔍 "東京 ラーメン" 結果: Doc1(スコア高) Elasticsearchの特徴 高速な全文検索 転置インデックスで検索 分散アーキテクチャ シャードを複数ノードに分散 ニアリアルタイム リフレッシュ後に検索へ反映 転置インデックスで「言葉→文書」を高速に逆引きする検索エンジン
Elasticsearchのイメージ
ひよこ ひよこ
MySQLでもLIKE検索できるのに、Elasticsearchって必要なの?
ペンギン先生 ペンギン先生
探し方によるんだ。MySQLのLIKEは「Patrick%」のような前方一致ならインデックスを使えるけど、「%Patrick%」のようにワイルドカードで始まる検索では使えない。だから文章の途中にある言葉を探すのは苦手なんだよ。Elasticsearchは、文章をあらかじめ単語などに分けて索引を作っておくから、長い文章がたくさんあっても言葉から探しやすいんだ。
ひよこ ひよこ
その索引ってどんな仕組み?
ペンギン先生 ペンギン先生
「転置インデックス」という仕組みで、本の巻末にある索引と同じ考え方だよ。「Python → 32, 45, 78ページ」のように、言葉から、それが出てくる文書を引ける表を作っておく。ふつうは「文書→含まれる言葉」の向きだけど、その逆向きだから「転置」と呼ぶんだ。Elasticsearchが土台にしている検索ライブラリ、Apache Luceneがこの方式を使っているよ。
ひよこ ひよこ
日本語の文章でも同じようにできるの?
ペンギン先生 ペンギン先生
できるけど、分け方の設定が大事だよ。Elasticsearchは、保存するときに文章を「トークン」と呼ぶ小さな単位に分ける(テキスト分析)。英語は空白で区切れるけど、日本語は単語の間に空白がないから、日本語向けの分け方を選ぶ必要があるんだ。そのために、日本語用の分析プラグイン(kuromoji)が用意されているよ。分け方が合っていないと、探したい言葉で見つからないことがあるよ。
ひよこ ひよこ
ログの分析にElasticsearchを使うって具体的にどういうこと?
ペンギン先生 ペンギン先生
Logstashなどでログを集めてElasticsearchに保存し、Kibanaという画面で検索したりグラフにしたりする使い方だよ。この3つの頭文字をとって「ELKスタック」と呼ばれてきたんだ。「この時間帯のエラーだけ抜き出す」「どのURLでエラーが多いか集計する」といったことができるよ。
ひよこ ひよこ
保存したデータは、すぐ検索できるの?
ペンギン先生 ペンギン先生
保存直後に必ず出るわけではなく、検索への反映には「リフレッシュ」が必要だよ。既定の間隔はElastic Stackで1秒、Elastic Cloud Serverlessで5秒なんだ。Elastic Stackでは、直近30秒に検索されたインデックスを対象に定期リフレッシュする。設定や負荷でも待ち時間が変わるので「必ず1秒以内」とは考えないでね。これを「ニアリアルタイム」と呼ぶよ。別のDBから検索用にデータを写すなら、反映の遅れや写し漏れに備えて、作り直せる手順も用意しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Elasticsearch」って出てきたら「大量のドキュメントを全文検索できる分散型検索エンジンのことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Elasticsearch」 = Elastic(伸縮する・弾力のある)+ Search(検索)
💬 Elasticは「伸縮する・弾力のある」という意味の英語だよ。名前の由来についての公式の説明は、ここでは確認していないんだ

参考資料

← 用語集にもどる