Skip to content

DNET_Elasticsearch

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

Elasticsearch

概要

ビッグデータの可視化のプロダクト

詳細

Elasticsearch(エンジン)

特長

  • スケーラブル、スキーマレス、マルチテナント
  • ドキュメントに対し高度な超高速全文検索が可能

用途

データ駆動型システム

  • 未来予測
  • 意思決定
  • 企画立案

ストア、ストレージ

  • エンジン

    • Apache Lucene(全文検索)

    • ドキュメントを保存・検索

    • 超高速全文検索に特化

      • 1000万ドキュメント位まで1台で対応可能
      • それ以上は、Hadoopで処理を行う。
  • Elasticsearchは、

    • 単体で分散処理も可能。

    • ES-Hadoopで、

      • HadoopデータをElastic Stackにインデックスし、
      • Elasticsearchエンジンで高速処理することも可能。

    ∴ NoSQLとしてみた場合、ドキュメント指向+分散処理系に近い(NoSQLの該当節を参照)。

Elastic Stack

推奨のスタックみたいなもの
ElasticsearchKibanaLogstashBeats)。

Kibana

JavaScript製の対話的な可視化ツール

Logstash

汎用的な ETL(EAI/ETLの該当節を参照)ツール

Beats

  • Elastic Stack専用感

  • Goで開発された
    軽量データ収集ツール

  • ECS準拠

    • 自動構文解析機能付き
    • 自動データマッピング(Elasticsearch
    • 自動Dashboard生成(Kibana

RDB との比較

RDB Elasticsearch
Databases Indices
Tables Types
Rows Documents
Columns Fields

設計方法

検討する必要がある。

Nodes, Shards, Replica

  • Nodes

    • クラスタを構成する

    • 下記のShardsが分散して配置される。

    • Nodeの種類

      • Master node (Master eligible node)
        ・クラスタ情報を管理(Nodeの参加・離脱の管理、メタデータの更新、Shardsの割当)
        ・クラスタに1つのみ、 Master eligible node から動的に選出

      • Data node
        ・document がindex されているshards を保持
        ・CRUD、検索、aggregation のようなデータ操作を実行
        ・デフォルトではすべての node が、Data node

      • Ingest node
        ・インデックス前にドキュメントに前処理 パイプライン定義 を実行
        ・デフォルトではすべての node が、Ingest node

      • Coordinating node (Coordinating only node)
        ・リクエストのルーティング、検索・集計処理の取り纏め
        ・Coordinating node と Kibana node の同居を推奨
        ・すべての node が、Coordinating node(無効にできない)

      • Machine learning node
        ・有償オプション
        ・機械学習

      • Transform node
        ・有償オプション
        ・インデックスを変換するノード

      • Remote_Cluster_Client
        ・他のクラスタへの単方向接続
        ・デフォルトでは有効のため、外部接続を制限する場合は無効に設定

  • Shards
    クラスタ内で分散配置できるようにインデックスを分割した単位

    • Indexが論理的な概念とすると、Shard は物理的な概念
    • Luceneの1インスタンス
    • Node を増やせば Shard が自動で再配置(スケールアウト)される
  • Primary Shard

    • 書き込み可能
    • 数は Index 作成時に固定
    • Replica Shard と同じ Node には配置されない。
  • Replica Shard

    • 読み取り専用
    • 数はいつでも変更できる。
    • Primary Shard と同じ Node には配置されない。
  • 参考

Indices

  • データ量や更新頻度に対する考慮

    • 複数の Shards から構成される。

    • ShardsNodes に分散する。

    • 1つの Index に対

      • するデータ量や書き込み速度を分散できる。
      • して、書き込み可能な Shards の数を変更できない。
    • 親子関連のデータは別の Index にはできないため、Type で分けて、

      • 親子関連のデータとして Index するか、
      • 1つのドキュメント内に Nested Type 型のデータとして Index するのか

      のどちらか。

  • 運用要件

    • 複数の Index に同じ名前の Alias をつけることができる。
    • 事前に新しい Index を作成し、公開したいタイミングでその情報を検索結果に反映できる。
  • 多言語対応

    • Index レベルで分ける。
    • Type レベルで分ける。
    • Document の属性に lang を用意する。
  • データ・スキーマが異なるだけの場合

    • Index レベルで分ける。
    • Type レベルで分ける。
  • Tribe Node で重複しない名称付与

Types

※ v6 以降では、Type指定が非推奨に。タイプ名の代わりに「_doc」を指定。

Documents

JSON形式のデータ

Fields

JSON形式のデータ中のキー

検索処理の概要

サーチ API

  • indexまで指定

    GET|POST /{index}/_search
    
  • typeまで指定

    GET|POST /{index}/{type}/_search
    
  • バリエーション

    • index, typeは、[,]区切りで列挙可能。
    • [*]をワイルドカードで使用可能。
    • index, typeに、_allを指定可能。
  • Alias
    index名には Alias を使用可能。

  • ページング

    • size: 1度に検索結果を取得する数
    • from: スキップする検索結果数

Mapping、Analysis、Query DSL

  • Mapping
    全文検索のindex生成

    • どのフィールドが文字列、数値、日付、geolocationか?
      • 文字列フィールド:全文検索の対象か?
      • 日付フィールド:日付の形式は?
    • _all フィールドをインデックス化するかどうか?
    • 動的に追加されるフィールドのマッピング
  • Analysis
    言語処理や正規化などフィールドの値の加工について

  • Query DSL
    JSON フォーマットによる検索条件の組み立て

Apache Lucene

ドキュメント登録にはXML、JSONなどを使用

全文検索

正確かつ効率的な検索アルゴリズム

  • テキスト分析

  • クエリ

    • 多数のクエリタイプ
    • クエリ式の構文解析、誤字補完機能
    • カスタムソート、フィルタリング
  • スコアリング、ランキング

  • 検索結果のハイライト機能

  • RESTライクAPI

アナライザ

性能

1時間に150GB以上のインデックススループット/ランク付け処理

ECS

ECS : Elastic Common Schema

  • Elasticsearchにデータ投入するための新しい仕様基準

    • 共通フィールドセットとネーミングのガイドラインを定義
    • データを一貫した方法で構造化し、カスタマイズにも対応する。
  • 以下の様々なケースでECSが生産性と性能をエンハンスする。

    • ユーザがデータを検索するケース
    • Kibanaでデータを調査するケース
    • 機械学習ジョブを構成するケース
    • アラート機能を設定するケース

参考

Wikipedia

Elastic

Qiita

Elasticsearch(参考リンク)

Elastic Stack(参考リンク)

Developers.IO

移行メモ

  • 「Logsatsh」は「Logstash」の誤記のため修正した(本文・参考リンクとも)。
  • 「Indices」の「親子関連のデータは別の Index にはできない Type で分けで、」は 文が繋がっておらず助詞も誤っていたため、 「親子関連のデータは別の Index にはできないため、Type で分けて、」に整えた。
  • 同名の見出し(「Elasticsearch」「Elastic Stack」)がページ内で重複し、 GitHub Wiki ではアンカが衝突するため、括弧で文脈を補って一意にした。

Tags: 移行, Elasticsearch, Elastic Stack, Kibana, Logstash, Beats, Apache Lucene, 全文検索, NoSQL, ECS

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally