Luceneをベースに開発された全文検索エンジンです。このページでは、Elasticsearchの特徴、Elasticsearchと周辺ツール、Elasticsearchに対するデージーネットの取り組みを紹介します。ElasticsearchとはElasticsearchとは、Elastic社が開発しているオープンソースソフトウェアの全文検索エンジンです。2010年に初めてのバージョンがリリースされました。RDBではSQLを使用してデータを検索しますがElasticsearchはRESTfulインターフェースを用いてデータを検索します。Elasticsearchは、検索速度や分析柔軟性に優れており、わかりやすく検索機能を利用でき、データ蓄積や分析環境を簡単に構築することができます。Elasticsearchは、数百台で構成するような大規模検索システム、ショッピングサイト等の多くの商品から関連する商品を検索するシステム等を構築することに適しています。Elasticsearchの特徴Elasticsearchの主な特徴は、次のとおりです。ビックデータ解析に対応可能な検索性能がある部分一致検索や近似値の検索が可能である。APIを採用しているHadoopやSPARKと組み合わせて利用できるデータの登録や解析のための周辺ツールが充実しているこのようにElasticsearchには様々な特徴があります。以下では、Elasticsearchの特徴について詳しく紹介します。Elasticsearchの部分一致検索Elasticsearchでは、部分一致検索が可能です。リレーショナルデータベースは検索条件に対し、完全一致した値を返します。それに対して、Elasticsearchでは、予め文字列を要素解析して保存するため、検索条件に対し近似した値も返すことができ、高速で動作します。高速検索Elasticsarchは、列指向のデータ管理、FST、BKD-Treeによって、少ないメモリで高速な検索を実現しています。列指向のデータ管理リレーショナルデータベースでは行指向でデータを管理するのに対して、Elasticsearchは列指向でデータを管理します。管理するデータベースから在庫数が少ないものを抽出する場合を例にとってみます。従来の行指向のデータベースでは、一つ一つの製品ごとにデータが管理されています。各製品の行の中から、在庫数の項目を取り出して比較することになります。各製品の行の中から、在庫数の項目を取り出して比較することになります。列指向のデータ管理の場合には、データは列ごとに管理されています。そのため、在庫データの列の中から条件に合致するものだけを取り出して、関連する製品の名前を調べることができます。そのため、このような用途では、行指向のデータベースよりも、列指向のデータベースの方が適しています。Elasticsearchは、列指向でデータを管理するため、大量の情報の中から必要なデータを高速に検索することができるのです。Transducers)さらに、Elasticsearchでは、テキストデータの管理にも高速な手法を採用しています。Transducers)と呼ばれる検索インデックスを踏襲しています。FSTは、自然言語処理で使われる手法で、テキストの正規化や品詞分類などでも使われます。Elasticsearchは、FSTを採用することで、入力された文字列を正規化してインデックスします。BKD-Treeまた、Elasticsearchでは、数値データの管理にも高速な手法を採用しています。Elasticsearchでは、数値データをBKD-Treeというアルゴリズムで管理します。B-tree)を改良したアルゴリズムです。B-treeは、コンピュータプログラムで検索を行う時によく使われる木構造のことです。K-D-B-treeは、それを多次元に拡張したアルゴリズムで、k次元のB-treeを意味しています。Elasticsearchは、BKD-Treeを採用することで、多様な数値データを高速に検索することができるようになっています。スキーマレスElasticsearchは、リレーショナルデータベースのようなスキーマを使わずに、データを登録することができます。データの型は自動的に判別されます。そのため、高速にデータの登録ができます。一方で、Elasticsarchでは明示的にスキーマの定義を行うことも可能です。適切にスキーマを定義することで、より高い検索性能を引き出すことができます。Elasticsarchでは、投入したデータに対して、事後的にスキーマの適用や修正を行うこともできます。様々な検索クエリの実行が可能Elasticsearchは、一般的には全文検索用データベースと考えられています。テキストだけでなく、数値、構造化データ、非構造化データ、地理情報などにも対応しています。ElasticSearchでは、様々な検索クエリをサポートしています。次のような検索クエリの実行が可能です。部分一致検索(match)部分一致検索です。複数のキーワードを並べた場合にはOR検索します。AND検索(bool)matchを使った複数の検索をAND条件で検索します。フレーズ検索(match_phrase)空白を含む単語を検索します。重み付け(boost)複数のキーワードで検索する時に、検索時のパラメータとして重みを付けます。範囲指定(filter)範囲を指定して、該当するものだけを出力します。検索スコア(explain)検索結果にスコアつけて出力します。関連性の高さを調べることができます。highlight検索に一致した部分に強調タグを付けて出力します。データセキュリティElasticsearchでは、ユーザにアクセス権限を付与することができます。ユーザごとにデータベースへのアクセスを制限することが可能です。そのため、不正利用を防ぎ、安全にデータを管理することができます。マルチテナントのデータベースとして利用することもできます。Elasticsearchの高可用性とスケーラビリティElasticsearchは、論理構成と物理構成で成り立っています。それぞれの構成は以下の通りです。論理構成インデックス物理的なファイルに保存される単位。ドキュメントの集合体。複数のインデックスをサポートしています。タイプインデックス内の区分。ドキュメントタイプの設定から構成されるデータ群。物理構成クラスタノードからなる集合体。Elasticsearch分散処理システムの一番上位の単位です。論理構成と物理構成の相関関係は、次の図のようになっています。Elasticsearchでは、物理的なデータを複数のノードに分散し、シャードをレプリケーションすることで、データの冗長性を確保することができます。このようにクラスタをノード単位で構成しているため、クラスタの構築が容易に行えます。クラスタ構成を組みたいネットワークを指定し、同一クラスタ名で起動するだけで容易にクラスタ構成を組むことができるのです。このため、mysqlなどのRDBよりも、dockerやKubernetesのようなコンテナ環境で利用するにも適しています。大規模なデータの分散並列処理を行うHadoopなどとの連携が可能です。分散並列処理を行うことで大規模データの処理にも対応できます。APIは、次のようなRESTの原則にしたがって作られたAPIです。サーバとクライアント間は、ステートレスなHTTP通信である統一メソッドを利用してリソース(情報)へアクセスするリソースには、グローバルで一意なURIでアクセスするリソースは、HTMLやXMLなどのハイパーメディアであり、他のリソースや状態へのリンクを含めることができる最近では、多くのプログラミング言語にRESTを使うためのインタフェースが用意されています。これらのインタフェースを利用することで、プログラムの作成なども簡単に行うことができます。次はcurlコマンドを使ってローカルのElasticsearchに接続し、検索クエリを行う実行例です。}}Elasticsearchと周辺ツールElasticsearchの開発元であるElastic社は、Elasticsearchとともにいくつかのツールを提供しています。ここでは、Kibana、Logstash、Kuromojiとの連携について紹介します。KibanaKibanaは、Elastic社が開発したログデータの可視化ツールです。Webブラウザ上で操作でき、Elasticsearchの検索機能を活用し、時系列でのデータ抽出や属性に合わせたデータ抽出を行います。抽出したデータをグラフィカルに表示することができます。表やグラフなどの形式で分かりやすく表示できます。Kibanaは、非常に強力なログ解析ツールであり、リアルタイム分析やレポートの作成も可能です。Kibanaには、ダッシュボード機能が付属しています。ダッシュボードは、用途に合わせてカスタマイズ可能です。そのため、適切なカスタマイズを行っておくことで、必要な情報にすぐにアクセスすることができます。LogstashLogstashは、様々な形式のデータを収集・変換し、任意の場所に保管することができるOSSです。Logstashを利用すると、ログファイルに溜まっているデータを解析して、データベースへ格納するなど、用途にあった形にデータを変換・保存することができます。Logstashを使って様々なデータを収集し、Elasticsearchに登録し、Kibanaを使って可視化することができます。KuromojiKuromojiは、Elasticsearchで日本語の解析を行う場合に利用されるオープンソースの日本語形態素解析エンジンです。Javaで書かれています。Luceneへの日本語のサポートを提供しています。Kuromojiは、複合語の分割、品詞のタグ付け、見出し化、読みの抽出などの機能を提供します。このように、他のソフトウェアを組み合わせることで、様々な用途でElasticsearchを使うことができます。デージーネットの取り組みデージーネットでは、Elasticsearchを使ったログ管理システムや、Webやファイルサーバの全文検索システムなどを提案しています。ここでは、関連事例を紹介します。大容量ログ解析システムデージーネットでは、大容量のログを管理するためのソフトウェアであるSylasを開発し、OSSとして公開しています。Sylasは、rsyslogと連携してElasticsearchにログを取り込みます。Sylasの検索画面からログの検索を行うことができます。DNSログ解析システムデージーネットでは、DNSサーバへの攻撃に対応するためのDNSログ解析システムを提案しています。DNSサーバから、dnstapなどのインタフェースを使ってクエリログを収集して、Elasticsearchに登録します。収集されたログをKibanaを使って解析することで、攻撃の状況をリアルタイムに把握し、攻撃に対する防御を行うことができます。ファイルサーバ全文検索システムElasticsearchは、ファイルサーバの全文検索のソリューションとしても利用できます。ファイルサーバへの全文検索を実現すれば、膨大なファイルの中から、必要なファイルを短時間で探し出すことができます。ファイルサーバの情報を管理するためには、ファイル情報を取り出して取り込むためのソフトウェアが必要です。デージーネットでは、そのようなソフトウェアとしてFessをご提案しています。Fessは、ファイルサーバを自動的にクロールし、ファイルの情報を取り出し登録します。Fessには標準で検索インタフェースも付属しています。検索結果を絞り込むことも可能です。サイト内検索システムElasticsearchは、サイト内検索のソリューションとしても利用可能です。Webサイトの情報を管理するためには、Webサイトにアクセスし、情報を取り出して取り込むためのソフトウェアが必要です。デージーネットでは、そのようなソフトウェアとしてFessをご提案しています。Fessは、HTTPプロトコル経由でサイトを自動的にクロールし、情報を取り出して格納します。サイトのデザインに合わせた専用の検索画面を作成することもできます。APIを利用して、検索結果を表示するアプリケーションを作成します。デージーネットのホームページでも、サイト内検索の機能を実装するためにこの仕組みを使っています。ElasticsearchとKibanaを連携させることで、サイト内検索の利用状況について分析することもできます。ElasticserchコンサルティングElasticsearchを使ってシステムを作っても、思ったより検索に時間がかることがあります。そのような場合には、利用するメモリ量に合わせてチューニングする必要があります。デージーネットの改善支援コンサルティングサービスでは、こうしたチューニングの作業を行っています。デモのお申込みもっと使い方が知りたい方へ操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。デモをご希望の方は、下記よりお申込みいただけます。Luceneをベースに開発された全文検索エンジンです。Elastic社が中心となって開発され、OSSとして公開されています。分散処理型の検索エンジンで、ビッグデータの解析などに使われています。ElasticsearchのインストールElasticsearchは、Elastic社からパッケージなどで提供されています。そのため、簡単にインストールすることができます。HUBには、公式のdockerイメージも公開されています。ここでは、パッケージからのインストール方法を紹介します。