Elasticsearchの概要
ElasticsearchはElastic社が開発するオープンソースの分散型全文検索エンジンです。Elasticsearchの元となるソフトウェアは「Compass」という名前で2004年にShay
Banon氏によって開発されました。
その後、スケーラブルな検索ソリューションへの対応のため、クラスタリング機能やAPIなど多くの機能が改良、追加され2010年にElasticsearchとして初めてのバージョンがリリースされました。
現在は、Shay Banon氏らが設立したElastic社が引き続き開発をおこなっています。
ElasticsearchはJavaで記述された検索ライブラリ「Lucene」をベースに作られており、同様にLuceneをベースに作られたSolrとともにオープンソースの全文検索エンジンとして高い人気を誇っています。(*1)
Elasticsearchはスケーラビリティと高可用性に優れていることから、ソーシャルネットワークやGitHub、e-bay、Ciscoなど多くの大規模サービスにおいて検索システムの中核となるソフトウェアとして採用されています。
また、近年は全文検索の分野以外でもElastic社が提供するKibana(*2)やLogstash(*3)、Beats(*4)などのプロダクト(Elastic
Stack)と連携して大量のログを分析する基盤、あるいはサービスやサーバの監視基盤など、幅広く利用されるようになってきています。こういった用途に対してElastic Stackの有償オプションでは、 Elastic
Stackでのセキュリティ確保やアラート設定、レポート出力などを簡便且つ効率的に行うプラグイン群を提供しています(*5)。
2017年3月に行われた公式カンファレンスであるElastic{ON}では、クエリのSQL対応や、ElasticsearchとKibanaのクラスタ構築を容易に実現するクラウドサービスであるElastic
Cloudの公式リリースが発表されました。このように機能追加やサービス展開も継続して行われている他、活用事例なども豊富でコミュニティが活性化していることから、Elasticsearchは今後さらなる発展が期待されます。
*1 DB-ENGINES :Trend of Search Engines Popularity
https://db-engines.com/en/ranking_trend/search+engine
*2 集積されたデータの視覚化を行なうツール
https://www.elastic.co/jp/products/kibana
*3 データの取り込み、保存場所への送信を行なうツール
https://www.elastic.co/jp/products/logstash
*4 サーバのメトリクスや、ログの内容を取得して送信するツール
https://www.elastic.co/jp/products/beats
*5 データモニタリングや、アラート通知、グラフ等の機能を拡張
https://www.elastic.co/jp/elastic-stack/features
Elasticsearchの主な特徴
スキーマレスであること
Elasticsearchはスキーマレスであると表現されますが、それはデータのインデキシング時に自動的に各フィールドのデータ型を判別してマッピング定義(*6)を自動生成することで、ユーザがスキーマ定義作業をすることなく利用を開始できるためです。ただし、自動マッピング定義機能は汎用的であるため、すべてのデータに対して適切なマッピング定義が生成されるわけではありません。そういった場合には、データをインデキシングする前に、特定のフィールドに対してデータ型や、アナライズ(どのようにデータを解析するか)の方法を定義することで、ユーザの任意の形でデータをインデキシングすることが可能です。
*6 マッピング定義とは、スキーマをElasticsearchのデータとしてどのように保存するか定義したものでRDBでのテーブル定義と同等の役割を果たします。
JSON over HTTPによるアクセスの一貫性
Elasticsearchでは、すべてがJSONで表現されています。これは、インデキシングされたデータ構造から、マッピング定義にいたります。ElasticsearchのREST
APIに対してHTTPリクエストを送ってマッピング定義を表示するようにリクエストを送るとマッピング定義がJSONドキュメントとして返ってきます。
(例)マッピング定義を表示するためにRESTエンドポイントにリクエスト送る
curl -XGET 'http://localhost:9200/_mapping?pretty'
上記リクエストに対してのレスポンスは次のようなJSONで返されます。
{
"dstat_v2" : {
"mappings" : {
"_default_" : {
"dynamic_templates" : [ {
"templeate_double" : {
"mapping" : {
"type" : "double"
},
"match" : "dstat-*",
"match_mapping_type" : "string"
}
} ]
},
:
:
また、マッピング定義を変更する際にもElasticsearchのREST APIに対してHTTPリクエストのボディにJSONで定義を記述したリクエストを送信します。
curl -XPUT http://localhost:9200/_template/dynamic_string -d '{
  "template": "serverlog*",
  "mappings": {
"_default_": {
"dynamic_templates": [
{
"strings" : {
"match_mapping_type" :
"string",
"mapping": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index" : "not_analyzed",
"ignore_above":256
}
}
}
}
}
],
"properties" : {
"@timestamp" : { "type" : "date",
"index" : "not_analyzed" }
}
}
}
],
プラグインが豊富且つ、開発可能であること
Elasticsearchはプラグインが豊富であるという特徴もあります。プラグインはElasticsearch認定であり、Elastic社の社員が開発に携わっているCore Pluginsと、それ以外のCommunity
contributedの二つに大別することができます。前述のElastic Stackの有償オプションはCore Pluginsに分類されます。
プラグインの種別としては言語解析用途やElasticsearchそのものの管理用途など様々なものが存在します。日本語の形態素解析器としては、kuromoji(*7)というプラグインがElasticsearchのCore
Pluginとして提供されています。
また、elasticsearch-head(*8)やelasticsearch-HQ(*9)など、Community製のプラグインも充実しています。こういったプラグインは形態素解析や、フィルタのカスタマイズなど、要件に併せて自作することも可能(*10)です。
(*7) Japanese (kuromoji) Analysis plugin
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-kuromoji.html
(*8) mobz/elasticsearch-head: A web front end for an elastic search cluster
https://github.com/mobz/elasticsearch-head
(*9) ElasticHQ/elasticsearch-HQ: Simplified Monitoring and Management for ElasticSearch clusters
https://github.com/ElasticHQ/elasticsearch-HQ
(*10)
https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html
Elasticsearchの主な機能
公式サイトによるとElasticsearchの主な機能は、以下となります。
公式サイトのURLは下記になります。
https://www.elastic.co/jp/elasticsearch/features
カテゴリ | 機能 | 概要 |
---|---|---|
管理と運用 | スケーラビリティと回復性 | クラスタリングと高可用性 ノードの自動復旧 自動のデータリバランス 分散型スケーラビリティ rack認識 クラスター横断レプリケーション データセンター横断レプリケーション |
セキュリティ | Elasticsearchを安全に設定する 通信の暗号化 保存データの暗号化 ロールベースのアクセス制御(RBAC) 属性ベースのアクセス制御(ABAC) フィールドとドキュメントレベルのセキュリティ 監査ログ IPフィルター セキュリティレルム シングルサインオン(SSO) サードパーティセキュリティの統合 |
|
クライアント | 各種プログラミング言語に対応 Elasticsearch DSL Elasticsearch SQL Event Query Language(EQL) JDBCクライアント ODBCクライアント Elasticsearch向けTableauコネクター CLIツール |
|
インテグレーション | Elasticsearch-Hadoop Apache Hive Apache Pig Apache Spark Apache Storm ビジネスインテリジェンス(BI) プラグインと統合機能 |
|
インジェストとエンリッチ | 管理 | スナップショットからのリカバリ インデックスライフサイクル管理 データティア Frozenインデックス スナップショットライフサイクル管理 スナップショットと復元 検索可能スナップショット ソースのみのスナップショット データのロールアップ データストリーム 変換 アップグレードアシスタントAPI APIキーの管理 |
アラート | 高可用でスケーラブルな通知 Eメール、Webフック、IBM Resilient、Jira、Microsoft Teams、PagerDuty、ServiceNow、Slack経由の通知 |
|
REST API | ドキュメントAPI サーチAPI アグリゲーションAPI インジェストAPI 管理API |
|
デプロイ | ダウンロードとインストール Elastic Cloud Elastic Cloud Enterprise Elastic Cloud on Kubernetes Helmチャート Dockerコンテナー化 |
|
インジェスト | クライアントとAPI インジェストノード Beats Logstash コミュニティのシッパー |
|
データエンリッチメント | Elastic Common Schema 各種プロセッサー 各種アナライザー 各種トークナイザー フィルター 言語アナライザー 動的マッピング 一致エンリッチプロセッサー 地理空間一致エンリッチプロセッサー |
|
データストレージ | フレキシビリティ | データタイプ 全文検索(転置インデックス) ドキュメント格納(非構造化データ) 時系列/分析(列での格納) 地理空間(BKDツリー) |
セキュリティ | フィールドとドキュメントレベルのAPIセキュリティ 保存データの暗号化 |
|
管理 | クラスター化インデックス データスナップショットと復元 ソースのみのデータスナップショット ロールアップインデックス |
|
検索と分析 | 全文検索 | 倒置インデックス ランタイムフィールド クラスター横断検索 関連性スコアリング Query DSL 非同期検索 強調表示 自動入力 入力予測 修正(スペルチェック) パーコレーター クエリプロファイラー/オプティマイザー 権限ベースの検索結果表示 動的にアップデート可能な同義語 結果のピン留め |
分析 | アグリゲーション グラフ探索 |
|
機械学習 | 時系列データの将来予測 時系列データの異常検知 異常の通知 推論 言語の特定 |
Elasticsearchの動作環境
Elasticsearchのバージョン7系からはOpenJDKがバンドルされています。バンドルされているJVMが推奨されるJVMになります。バンドルされたOpenJDKではなく、固有のJDKを利用することも可能ですが、サポートされているLTSバージョンのJDKの利用が推奨されます。既知の問題があるJDKバージョンを使用しようとすると、起動自体が拒否されます。
各OSやブラウザでのElasticsearchの各バージョンの動作実績に関しては下記URLを参照ください。
https://www.elastic.co/support/matrix
Elasticsearchのライセンス
Elasticsearchは、Elastic License とServer Side Public License(SSPL)のデュアルライセンスです。7.11以降の配布パッケージはElastic License
2.0の下に提供されます。Elastic License 2.0は、製品とブランドを保護する3つのシンプルな制約の下に、無料の使用、修正、再配布を許諾します。
Elasticsearchのライセンスの詳細については下記をご参照ください
https://www.elastic.co/jp/pricing/faq/licensing
Elasticsearchのドキュメント
Elasticsearchの各種ドキュメントは下記URLから参照ください。
https://www.elastic.co/guide/index.html
Elasticsearchのダウンロード
各種OSの向けのElasticsearchのパッケージは下記URLに取得方法が記載されています。
https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
参考情報
Elasticsearch公式サイト
Elasticsearch公式サイト(日本語)
GitHubリポジトリー
Wikipedia - Elasticsearch(日本語)
Elasticsearchのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。