Elasticsearch情報
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-Hadoop  | 
|
| 
 インジェストとエンリッチ  | 
 管理  | 
 
スナップショットからのリカバリ  | 
| 
 アラート  | 
 
高可用でスケーラブルな通知  | 
|
| 
 REST API  | 
 
ドキュメントAPI  | 
|
| 
 デプロイ  | 
 
ダウンロードとインストール  | 
|
| 
 インジェスト  | 
 
クライアントとAPI  | 
|
| 
 データエンリッチメント  | 
 
Elastic Common Schema  | 
|
| 
 データストレージ  | 
 フレキシビリティ  | 
 
データタイプ  | 
| 
 セキュリティ  | 
 
フィールドとドキュメントレベルのAPIセキュリティ  | 
|
| 
 管理  | 
 
クラスター化インデックス  | 
|
| 
 検索と分析  | 
 全文検索  | 
 
倒置インデックス  | 
| 
 分析  | 
 アグリゲーション  | 
|
| 
 機械学習  | 
 
時系列データの将来予測  | 
主な特徴
スキーマレスであること
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"
           }
         } ]
       },
      :
      :
また、マッピング定義を変更する際にも、ボディ部にJSONで定義を記述したHTTPリクエストをElasticsearchのREST APIに対して送信します。
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)など、コミュニティ製のプラグインも充実しています。こういったプラグインは形態素解析や、フィルタのカスタマイズなど、要件に併せて自作することも可能(*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のバージョン7系からはOpenJDKがバンドルされています。バンドルされているJVMが推奨されるJVMになります。バンドルされたOpenJDKではなく、固有のJDKを利用することも可能ですが、サポートされているLTSバージョンのJDKの利用が推奨されます。既知の問題があるJDKバージョンを使用しようとすると、起動自体が拒否されます。
各OSやブラウザでのElasticsearchの各バージョンの動作実績に関しては下記URLを参照ください。
Elasticsearchのライセンス
Elasticsearchは、Elastic License とServer Side Public License(SSPL)のデュアルライセンスです。7.11以降の配布パッケージはElastic License 2.0の下に提供されます。Elastic License 2.0は、製品とブランドを保護する3つのシンプルな制約の下に、無料の使用、修正、再配布を許諾します。
Elasticsearchのライセンスの詳細については下記をご参照ください
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

