こんにちは、皆さん。検索技術の世界へようこそ。
本記事では、検索技術の分野で革命をもたらしたが、同時に議論を呼んできた製品について掘り下げます。Elasticsearchです。
導入
もしLuceneが舞台裏のヒーローなら、Elasticsearchはまさにセンター stageのスターです。REST API、分散アーキテクチャ、強力なエコシステムを通じて、検索+分析を「すぐに使える」サービス形式にしました。
ログプラットフォーム、オブザーバビリティ、セキュリティ監視、AIとセマンティック検索などの分野で、Elasticsearchの名前は事実上のデフォルト選択肢となっています。
Elasticsearch概要
Elasticsearchは、Apache Lucene上に構築されたオープンソースの分散検索・分析エンジンです。検索プラットフォームとして、構造化データ、非構造化データ、ベクトルデータをリアルタイムに保存し、高速な混合検索とベクトル検索を提供します。オブザーバビリティとセキュリティ分析をサポートし、高性能、高精度、高関連性でAI駆動型のアプリケーションを実現します。
- 初リリース:2010年2月
- 最新バージョン:9.1.3(2025年9月時点)
- コア依存:Apache Lucene
- オープンソースライセンス:AGPL v3
- 公式サイト:https://www.elastic.co/elasticsearch/
- GitHubリポジトリ:https://github.com/elastic/elasticsearch
起源:レシピ検索から世界の「スター」へ
Elasticsearchの物語は、イスラエルの開発者Shay Banonから始まります。2010年、当時シェフコースで学んでいた妻が、レシピを迅速に検索できるツールを必要としていました。当時にはすでにSolrのような検索ソリューションがありましたが、Shayはそれらの分散シナリオに対するサポートが十分でないと感じていました。
以前に開発したCompass(Luceneに基づく検索ライブラリ)の経験を基に、Shayは完全に分散された、JSONベースの検索エンジンの構築を開始しました。2010年2月、Elasticsearchの最初のバージョンがリリースされました。
ユーザーが増え、企業ニーズが高まるにつれて、Shayは2012年にElastic社を設立し、Elasticsearchをオープンソースプロジェクトとしてだけでなく、商業的にも運営し始めました。ホスティングサービス、エンタープライズサポート、Logstashログ処理、Kibana可視化ツールの追加などを含め、Elastic社は純粋な検索エンジンプロジェクトからより広範な「データ検索と分析」プラットフォームへと進化していきました。
ライセンス変更:オープンソースとビジネスの狭間
Elasticsearchの道のりは平坦ではありませんでした。その歴史で最も転換点となった出来事は、AWSとの対立およびそれに続くオープンソースライセンスの変更です。
- 初期:Apache 2.0ライセンス
2010年、Shay BanonがElasticsearchをオープンソースで公開した際、最初に採用したのはApache 2.0ライセンスでした。Apache 2.0は緩やかなフリーなライセンスで、誰でも無料で使用、修正、商用利用(SaaSモデルを含む)を許可していました。これによりElasticsearchは急速に成長し、事実上の「検索エンジン標準」になりました。
- ライセンス変更:クラウドベンダーへの対応
Elasticsearchの人気が高まるにつれ、AWS(Amazon Web Services)などのクラウドベンダーが直接Elasticsearchをホスティングサービスにし、そこから利益を上げるようになりました。Elastic社はこれが彼らの商業的利益を損なうと考え、クラウドベンダーが「オープンソースでお金を儲けているが、コミュニティに還元していない」と主張しました。2021年1月、Elastic社はElasticsearchとKibanaがもはやApache 2.0を採用せず、SSPL + Elastic Licenseのデュアルライセンスに変更すると発表しました。この決定はコミュニティを大きく分裂させ、AWSが主導してElasticsearchをOpenSearchとしてフォークし、Apache 2.0ライセンスで維持を続けました。
- 再度オープンソースへ:AGPL v3
2024年3月、Elastic社は新しいバージョン(Elasticsearch 8.13以降)にAGPL v3をオープンソースライセンスオプションとして追加することを発表しました。AGPL v3はOSIの真のオープンソース基準に合致しつつ、クラウドベンダーのクローズドソースホスティングサービスを制約し、コミュニティ関係の修復も可能です。Elastic社は再びオープンソースを擁抱することで、分裂を減らし、開発者コミュニティの再関与を図っています。
Elasticsearchの緩やかなライセンスから厳格なものへ、そしてオープンソースへの回帰は、コミュニティエコシステムとビジネス利益の間のバランスを探る過程です。
基本概念
Elasticsearchを学ぶには、まずその5つの基本概念を理解する必要があります:クラスター、ノード、シャード、インデックス、ドキュメント。
- クラスター(Cluster)
1つまたは複数のノードで構成される全体で、統一された検索とストレージサービスを提供します。外部から見ると単一のシステムのように見えます。
- ノード(Node)
クラスター内の1台のサーバーインスタンスです。ノードには異なる役割があります:
- マスターノード:クラスター管理(シャード割り当て、メタデータ維持)を担当します。
- データノード:データを保存し、検索と集約を処理します。
- コーディネートノード:リクエストを受け取り、タスクをスケジュールします。
- Ingestノード:データ書き込み前の前処理を担当します。
- インデックス(Index)
従来のデータベースの「データベース」に似て、データを論理的に整理します。1つのインデックスは通常、1つのビジネスシナリオ(ログ、商品情報など)に対応します。
- シャード(Shard)
インデックスを水平に拡張するため、Elasticsearchはインデックスを複数のプライマリシャードに分割し、各プライマリシャードにレプリカシャードを作成して、高可用性とクエリパフォーマンスを向上させます。
- ドキュメント(Document)
Elasticsearchで保存および検索される最小データ単位で、通常はJSON形式です。複数のドキュメントが1つのインデックスを構成します。
クラスター構成
Elasticsearchはマスター、データ、コーディネート、Ingestなどの役割の異なるノードの協力を通じて、データをシャードに分割し分散保存し、高可用性、スケーラビリティのある検索・分析エンジンアーキテクチャを実現しています。
クイックスタート:5分でElasticsearchを体験
1. Dockerを使用して起動
# 最新イメージをプル
docker pull docker.elastic.co/elasticsearch/elasticsearch:9.1.3
# 単ノードクラスターを起動
docker run -d --name my-elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:9.1.3
2. インストールを検証
# クラスター状態を確認
curl -X GET "http://localhost:9200/"
3. ドキュメントをインデックス化
# ドキュメントをインデックス化
curl -X POST "http://localhost:9200/sample_index/_doc" -H 'Content-Type: application/json' -d'
{
"title": "こんにちはElasticsearch",
"description": "サンプルドキュメント"
}'
4. ドキュメントを検索
# ドキュメントを検索
curl -X GET "http://localhost:9200/sample_index/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"title": "こんにちは"
}
}
}'
まとめ
Elasticsearchは検索と分析の分野における基準となる製品です。Luceneの能力をパッケージ化し、分散処理、使いやすさ、データ可視化、セキュリティ監視機能との統合を追加することで、検索エンジンを専門技術から「すぐに使える」インフラへと変えました。
ライセンスの変更やOpenSearchとの分岐が議論を呼んでいますが、企業と開発者コミュニティにおけるその実際の応用価値は依然として代替が難しいものです。
次回予告
次回はOpenSearchについて紹介し、このElasticsearchの分岐プロジェクトの現状、技術的特徴、そしてElasticsearchとの詳細な比較について掘り下げます。特に気になる点があれば、ぜひ事前にご質問ください!