34

Elasticsearch のインデックスとは何ですか? 1 つのアプリケーションに複数のインデックスがありますか? それとも 1 つだけですか?

ある自動車メーカー向けにシステムを構築したとしましょう。人、車、スペアパーツなどを扱っています。製造元という名前のインデックスが 1 つありますか?それとも、人、車、スペアパーツにそれぞれ 1 つのインデックスがありますか? 誰か説明してくれませんか?

4

4 に答える 4

78

良い質問です。その答えは、予想よりもはるかに微妙です。インデックスは、さまざまな目的で使用できます。

関係の指標

最も簡単で使い慣れたレイアウトは、リレーショナル データベースに期待されるものを複製します。インデックスは (非常に大まかに) データベースのようなものと考えることができます。

  • MySQL => データベース => テーブル => 行/列
  • ElasticSearch => インデックス => タイプ => プロパティを持つドキュメント

ElasticSearch クラスターには複数のIndices(データベース) を含めることができ、さらに複数のTypes(テーブル) を含めることができます。これらのタイプは複数Documents(行) を保持し、各ドキュメントにはProperties(列) があります。

SubaruFactoryしたがって、自動車製造のシナリオでは、インデックスがある場合があります。このインデックスには、次の 3 つの異なるタイプがあります。

  • People
  • Cars
  • Spare_Parts

各タイプには、そのタイプに対応するドキュメントが含まれます (たとえば、Subaru Imprezza のドキュメントはそのCarsタイプの中にあります。このドキュメントには、その特定の車に関するすべての詳細が含まれています)。

検索とクエリの形式は、http://localhost:9200/[index]/[type]/[operation] です。

したがって、Subaru ドキュメントを取得するには、次のようにします。

  $ 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 日間のログを同時に検索します。この形式には、ログの性質による利点があります。ほとんどのログはまったく見られず、直線的な時間の流れで編成されます。ログごとにインデックスを作成すると、より論理的になり、検索のパフォーマンスが向上します。

.

ユーザーの指標

別の根本的に異なるアプローチは、ユーザーごとにインデックスを作成することです。ソーシャル ネットワーキング サイトがあり、各ユーザーが大量のランダム データを持っているとします。ユーザーごとに 1 つのインデックスを作成できます。構造は次のようになります。

  • ザックのインデックス
    • 趣味の種類
    • 友達のタイプ
    • 写真の種類
  • フレッドのインデックス
    • 趣味の種類
    • 友達のタイプ
    • 写真の種類

このセットアップが従来の RDBM のやり方 (例えば、趣味/友達/写真をタイプとして持つ「ユーザー」インデックス) でいかに簡単にできるかに注目してください。すべてのユーザーは、単一の巨大なインデックスにスローされます。

代わりに、データの編成とパフォーマンス上の理由から、データを分割することが理にかなっている場合があります。このシナリオでは、各ユーザーが大量のデータを持っていると想定しており、それらを分離する必要があります。ElasticSearch では問題なく、ユーザーごとにインデックスを作成できます。

于 2013-02-22T14:29:07.490 に答える
0

インデックスは、対応するドキュメントへのフィールドのマッピングを格納するためのデータ構造です。目的は、多くの場合、メモリ使用量と前処理時間の増加を犠牲にして、より高速な検索を可能にすることです。

作成するインデックスの数は、アプリケーションの要件に従って行う必要がある設計上の決定です。各ビジネス コンセプトのインデックスを持つことができます.年の各月のインデックスを持つことができます.

lucene と elasticsearch の概念に慣れるために、ある程度の時間を費やす必要があります。

紹介ビデオと、いくつかのデータ設計パターンを含むこのビデオをご覧ください。

于 2013-02-22T14:27:29.020 に答える