「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[NoSQL]] > [[ドキュメント指向型>NoSQL - ドキュメント指向型]]
--[[分散処理]]

*目次 [#z15c23bb]
#contents

*概要 [#kb1b2908]
ビッグデータの可視化のプロダクト

*詳細 [#x66435b3]

**Elasticsearch [#xeeae7a8]

***特長 [#qcdfb1f2]
-スケーラブル、スキーマレス、マルチテナント
-ドキュメントに対し高度な超高速全文検索が可能

***用途 [#wb866e22]
データ駆動型システム
-未来予測
-意思決定
-企画立案

***ストア、ストレージ [#i438cfb0]
-エンジン

--[[Apache Lucene(全文検索)>#g5b90cbe]]

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

--超高速全文検索に特化
---1000万ドキュメント位まで1台で対応可能
---それ以上は、[[Hadoop]]で処理を行う。

-Elasticsearchは、

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

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

>∴ [[NoSQLとしてみた場合、ドキュメント指向+分散処理系に近い>NoSQL#rf480bb4]]。

**Elastic Stack [#r521f91b]
推奨のスタックみたいなもの~
([[Elasticsearch>#xeeae7a8]]、[[Kibana>#xdb2a250]]、[[Logsatsh>#h0b258a7]]、[[Beats>#h15c1264]])。

***Kibana [#xdb2a250]
JavaScript製の対話的な可視化ツール

***Logsatsh [#h0b258a7]
汎用的な[[ETL>EAI/ETL#eed58b6f]]ツール

***Beats [#h15c1264]
-[[Elastic Stack>#r521f91b]]専用感

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

-[[ECS>#r62e8607]]準拠
--自動構文解析機能付き
--自動データマッピング([[Elasticsearch>#xeeae7a8]])
--自動Dashboard生成([[Kibana>#xdb2a250]])

**RDB との比較 [#a377a192]
|RDB|Elasticsearch|h
|Databases|[[Indices>#u24be7b1]]|
|Tables|[[Types>#j4b96bde]]|
|Rows|[[Documents>#jc568f72]]|
|Columns|[[Fields>#xbc2e352]]|

***設計方法 [#q92b50e4]
-[[Nodes, Shards, Replica>#f34c97b1]]
-[[Indices>#u24be7b1]]レベルで分けるのか、[[Types>#j4b96bde]]で分けるのか、

検討する必要がある。

***Nodes, Shards, Replica [#f34c97b1]
-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>#g5b90cbe]]の1インスタンス
--Node を増やせば Shard が自動で再配置(スケールアウト)される

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

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

-参考
--Elasticsearchクラスタで必要なシャード数、ノード数を計算する - CLOVER🍀~
https://kazuhira-r.hatenablog.com/entry/2020/01/02/182732

***Indices [#u24be7b1]
-データ量や更新頻度に対する考慮
--複数の [[Shards>#f34c97b1]] から構成される。
--[[Shards>#f34c97b1]] を [[Nodes>#f34c97b1]] に分散する。

--1つの Index に対
---するデータ量や書き込み速度を分散できる。
---して、書き込み可能な [[Shards>#f34c97b1]] の数を変更できない。

--親子関連のデータは別の Index にはできない
[[Type>#j4b96bde]] で分けで、
---親子関連のデータとして Index するか、
---1つのドキュメント内に Nested [[Type>#j4b96bde]] 型のデータとして Index するのか

>のどちらか。

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

-多言語対応
--Index レベルで分ける。
--Type レベルで分ける。
--Document の属性に lang を用意する。

-データ・スキーマが異なるだけの場合
--Index レベルで分ける。
--Type レベルで分ける。

-Tribe Node で重複しない名称付与

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

***Documents [#jc568f72]
JSON形式のデータ

***Fields [#xbc2e352]
JSON形式のデータ中のキー

**検索処理の概要 [#tef1cf42]

***サーチ API [#z878230e]
-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 [#a0374c2c]
-Mapping~
[[全文検索>#i3421c0a]]のindex生成
--どのフィールドが文字列、数値、日付、geolocationか?
---文字列フィールド:全文検索の対象か?
---日付フィールド:日付の形式は?
--_all フィールドをインデックス化するかどうか?
--動的に追加されるフィールドのマッピング

-Analysis~
言語処理や正規化などフィールドの値の加工について

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

**Apache Lucene [#g5b90cbe]
ドキュメント登録にはXML、JSONなどを使用

***全文検索 [#i3421c0a]
正確かつ効率的な検索アルゴリズム

-[[テキスト分析>#l79ecf84]]

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

-スコアリング、ランキング
--Lucene's Practical Scoring Function
--[[BM25>言語処理(AI) #vade3462]]の様な[[TF-IDF>言語処理(AI) #hdbd22d6]]の進化系
--[[BM25>言語処理(AI)#vade3462]]の様な[[TF-IDF>言語処理(AI)#hdbd22d6]]の進化系

-検索結果のハイライト機能
-RESTライクAPI

***アナライザ [#l79ecf84]
-文書の索引付けと検索
--転置索引方式の採用
--[[形態素解析とN-gram>言語処理]]による単語切出

-参考
--Apache Lucene入門 - RONDHUIT~
https://www.rondhuit.com/lucene-for-bea-060710.pdf

***性能 [#q8792dbc]
1時間に150GB以上のインデックススループット/ランク付け処理

**ECS [#r62e8607]
ECS : Elastic Common Schema

-Elasticsearchにデータ投入するための新しい仕様基準
--共通フィールドセットとネーミングのガイドラインを定義
--データを一貫した方法で構造化し、カスタマイズにも対応する。

-以下の様々なケースでECSが生産性と性能をエンハンスする。
--ユーザがデータを検索するケース
--Kibanaでデータを調査するケース
--機械学習ジョブを構成するケース
--アラート機能を設定するケース

*参考 [#d0e8b5a7]

-効率的なPDCAのカギはストリーミングデータの可視化!|株式会社オロ~
https://www.oro.com/ja/technology/005/

-楽しい可視化 : elasticsearchとSpark Streamingの出会い | NTTデータ先端技術株式会社~
http://www.intellilink.co.jp/article/column/bigdata-kk02.html

**Wikipedia [#xcd4aa53]
-Elasticsearch~
https://ja.wikipedia.org/wiki/Elasticsearch

-Apache Lucene~
https://ja.wikipedia.org/wiki/Apache_Lucene

**Elastic [#v73c3baa]
-Elasticsearch | 分散型RESTful検索/分析エンジン~
https://www.elastic.co/jp/products/elasticsearch

-Elasticsearch for Hadoop~
https://www.elastic.co/jp/what-is/elasticsearch-hadoop

-オープンソースのElastic Stack~
(Elasticsearch、Kibana、Beats、Logsatsh)~
でリアルタイムな検索と分析~
https://www.elastic.co/jp/

**Qiita [#ffe93902]

***Elasticsearch [#i4d2b5e3]
-はじめての Elasticsearch~
https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329

-3分で分かった気になる、Elasticsearchとは?~
https://qiita.com/r548/items/3622048a622d9c0acc05

-Elasticsearch 超入門~
https://qiita.com/kws9/items/7695262be0befb94897f

-Kibanaで簡単! サクサク ビジュアライズしよう!~
https://qiita.com/kitfactory/items/9c2f990d87e33fab828a

-データベースとしてのElasticsearch~
https://qiita.com/rjkuro/items/95f71ad522226dc381c8

***Elastic Stack [#v0e2cb1f]
-Elastic Stackについて~
https://qiita.com/gitya107/items/1dc7cb98a5d7d583a684

**Developers.IO [#a0c52d94]
-Elasticsearch入門 | シリーズ~
https://dev.classmethod.jp/series/enter-elasticsearch/
--第1回 インデックスを設計する際に知っておくべき事~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-01/
--第2回 データスキーマ設計のいろは~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-02/
--第3回 ドキュメント管理は意外と高度なことができる~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-03/
--第4回 検索の基本中の基本~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-04/
--第5回 Elasticsearch の使いどころ~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-05/
--第6回 基本コンセプトを理解する~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-06/
--第7回 API の使い方をハンズオンで理解する 〜前編〜~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-07/
--第8回 API の使い方をハンズオンで理解する 〜後編〜~
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-08/

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS