【えらすてぃっくさーち】
Elasticsearch とは?
最終更新:
💡 大量データをすばやく検索するための「索引システム」
大量のドキュメントを全文検索・分析できる分散型の検索エンジン。データをJSONドキュメントとして保存し、ログ分析・商品検索・地理情報検索などに使われる。
📌 このページのポイント
MySQLでもLIKE検索できるのに、Elasticsearchって必要なの?
その索引ってどんな仕組み?
「転置インデックス」という仕組みで、本の巻末にある索引と同じ考え方だよ。「Python → 32, 45, 78ページ」のように、言葉から、それが出てくる文書を引ける表を作っておく。ふつうは「文書→含まれる言葉」の向きだけど、その逆向きだから「転置」と呼ぶんだ。Elasticsearchが土台にしている検索ライブラリ、Apache Luceneがこの方式を使っているよ。
日本語の文章でも同じようにできるの?
できるけど、分け方の設定が大事だよ。Elasticsearchは、保存するときに文章を「トークン」と呼ぶ小さな単位に分ける(テキスト分析)。英語は空白で区切れるけど、日本語は単語の間に空白がないから、日本語向けの分け方を選ぶ必要があるんだ。そのために、日本語用の分析プラグイン(kuromoji)が用意されているよ。分け方が合っていないと、探したい言葉で見つからないことがあるよ。
ログの分析にElasticsearchを使うって具体的にどういうこと?
保存したデータは、すぐ検索できるの?
保存直後に必ず出るわけではなく、検索への反映には「リフレッシュ」が必要だよ。既定の間隔はElastic Stackで1秒、Elastic Cloud Serverlessで5秒なんだ。Elastic Stackでは、直近30秒に検索されたインデックスを対象に定期リフレッシュする。設定や負荷でも待ち時間が変わるので「必ず1秒以内」とは考えないでね。これを「ニアリアルタイム」と呼ぶよ。別のDBから検索用にデータを写すなら、反映の遅れや写し漏れに備えて、作り直せる手順も用意しよう。
📖 おまけ:英語の意味
「Elasticsearch」 = Elastic(伸縮する・弾力のある)+ Search(検索)
💬 Elasticは「伸縮する・弾力のある」という意味の英語だよ。名前の由来についての公式の説明は、ここでは確認していないんだ
参考資料
- General index settings(Elasticsearch Reference、index.refresh_interval)
- The Elastic Stack(Elastic Docs)
- Index fundamentals(Elastic Docs)
- Text analysis(Elastic Docs)
- Japanese (kuromoji) analysis plugin(Elasticsearch Reference)
- Near real-time search(Elastic Docs)
- Elasticsearch(Elastic 製品ページ)
- Lucene 10.0 file format(Apache Lucene ドキュメント)
- Comparison of B-Tree and Hash Indexes(MySQL 8.4 Reference Manual)