[解決済み] Elasticsearchのインデックスとは
質問
Elasticsearchのインデックスとは何ですか?一つのアプリケーションは複数のインデックスを持つのでしょうか、それとも一つでしょうか?
例えば、どこかの自動車メーカーのシステムを作ったとします。人、車、スペアパーツなどを扱います。メーカーという名前のインデックスを1つ持つのか、それとも人、車、スペアパーツのインデックスを1つずつ持つのか?どなたか説明してください。
解決方法は?
良い質問ですね。その答えは、予想以上に微妙です。 インデックスはいくつかの異なる目的で使用することができます。
リレーションシップのためのインデックス
最も簡単で馴染みやすいレイアウトは、リレーショナル・データベースから期待されるものと同じです。 インデックスをデータベースのように(非常に大雑把に)考えることができます。
- MySQL => データベース => テーブル => 行/カラム
- ElasticSearch => インデックス => タイプ => プロパティ付きドキュメント
ElasticSearch クラスタには、複数の
Indices
(データベース) があり、そのデータベースには複数の
Types
(テーブル)です。 これらの型は、複数の
Documents
(行) があり、それぞれのドキュメントには
Properties
(列)です。
つまり、自動車製造のシナリオでは
SubaruFactory
インデックスを作成します。 このインデックスの中に、3種類のタイプがあります。
-
People
-
Cars
-
Spare_Parts
そして、それぞれのタイプには、そのタイプに対応するドキュメントが含まれます(例えば、Subaru Imprezzaのドキュメントは、Subaru Imprezzaのドキュメントに含まれる
Cars
タイプです。 このドキュメントには、その特定の車に関するすべての詳細が含まれています)。
検索や問い合わせは、以下のような形式をとります。 http://localhost:9200/[インデックス]/[タイプ]/[オペレーション]
では、すばるの文書を取り出すにはどうすればいいかというと、次のようになります。
$ curl -XGET localhost:9200/SubaruFactory/Cars/SubaruImprezza
.
ロギング用インデックス
さて、現実には、インデックスやタイプは、RDBMで慣れ親しんだデータベースやテーブルの抽象化よりもはるかに柔軟である。 これらは便利なデータ整理の仕組みと考えることができ、データの設定次第では性能上のメリットもあります。
根本的に異なるアプローチとして、多くの人がロギングにElasticSearchを使用していることを紹介します。 標準的なフォーマットは、日ごとに新しいインデックスを割り当てることです。 インデックスの一覧はこのようになります。
- ログ-2013-02-22
- ログ-2013-02-21
- ログ-2013-02-20
ElasticSearchでは複数のインデックスを同時にクエリできるので、やっても問題ないです。
$ curl -XGET localhost:9200/logs-2013-02-22,logs-2013-02-21/Errors/_search=q:"Error Message"
これは、過去2日間のログを同時に検索するものです。 この形式はログの性質上、利点があります - ほとんどのログは一度も見られず、時間の直線的な流れで構成されています。 ログごとにインデックスを作る方が論理的であり、検索のパフォーマンスも良くなります。
.
ユーザー向けインデックス
もう一つの根本的に異なるアプローチは、ユーザーごとにインデックスを作成することである。 あるソーシャル・ネットワーキング・サイトがあり、各ユーザーが大量のランダムなデータを持っているとする。 各ユーザーに対して一つのインデックスを作成することができます。 構造は次のようになります。
-
Zachのインデックス
- 趣味の種類
- 友人タイプ
- ピクチャーズタイプ
-
フレッド・インデックス
- 趣味の種類
- 友人タイプ
- ピクチャーズタイプ
この設定は、伝統的なRDBM方式で簡単にできることに注目してほしい(たとえば、趣味・友人・写真を型とした "Users"インデックス)。 そうすれば、すべてのユーザが1つの巨大なインデックスに放り込まれることになる。
その代わり、データ整理やパフォーマンス上の理由から、データを分割することが理にかなっている場合があります。 このシナリオでは、各ユーザに たくさん のデータを分離したい。 ElasticSearchでは、ユーザーごとにインデックスを作成しても問題ありません。
関連
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] javac ソースファイルが見つかりません
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Elasticsearchのシャードとレプリカ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] Java Swingで複数のボタンに対して複数のActionListenersを追加する方法
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] アニメーションGIFの表示
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] java.io.IOException。DER長の短い読み取り