ホームページ  >  記事  >  バックエンド開発  >  エラスティックサーチとは何ですか? Elasticsearch はどこで使用できますか?

エラスティックサーチとは何ですか? Elasticsearch はどこで使用できますか?

零下一度
零下一度オリジナル
2017-06-23 16:10:364114ブラウズ
  • Elasticsearch バージョン: 5.4

  • Elasticsearch クイックスタート パート 1: Elasticsearch の開始

  • Elasticsearch クイックスタート パート 2: Elasticsearch と Kibana のインストール

  • Elasticsearch クイックスタート パート 3: Elasticsearch のインデックスとドキュメント操作

  • Elasticsearch クイック スタート パート 4: Elasticsearch ドキュメント クエリ

Elasticsearch は、拡張性の高いオープンソースの全文検索および分析エンジンです。大規模なデータを迅速かつほぼリアルタイムで保存、検索、分析できます。これは通常、複雑な検索機能と要件を持つアプリケーションに強力なサポートを提供するための基礎となるエンジン/テクノロジとして使用されます。

Elasticsearch は次の場所で使用できます:

  1. 顧客が販売中の商品を検索できるようにするために、オンライン ストアの Web サイトがあるとします。この場合、Elasticsearch を使用して製品カタログと在庫全体を保存し、検索を提供したり、いくつかの提案を自動的に提供したりできます。

  2. ログやトランザクション データを収集し、分析やマイニングを通じて傾向、統計、概要、または異常を見つけたいとします。この場合、LogStash (Elasticsearch/Logstash/Kibanaスタックの一部) を使用してデータを収集、集約、解析し、このデータを LogStash を通じて Elasticsearch に渡すことができます。 Elasticsearch がデータを取得したら、興味のある情報を検索して集約できます。

  3. 価格アラート プラットフォームを運営し、価格に詳しい顧客に「特定の電子機器の購入に興味があります。来月以内に x ドルより低い価格の販売者がいる場合」などのルールを指定させるとします。 , 取得したいのですが「通知」します。この場合、販売者の価格を Elasticsearch に送信し、逆検索 (フィルター) を使用して、価格の変更を顧客のクエリと照合し、一致が見つかったら顧客に通知することができます。

  4. 分析 (ビジネス インテリジェンス) のニーズがあり、大量 (数百万または数十億のレコードを考えてください) のデータの中からアドホックな問題を迅速に調査、分析、視覚化して見つけたいという願望があるとします。この場合、Elasticsearch を使用してデータを保存し、次に Kibana (Elasticsearch スタックの一部) を使用してカスタム ダッシュボードを構築し、重要なデータを視覚化できます。さらに、Elasticsearch 集計機能を使用して、データに基づいて複雑なビジネス インテリジェンス クエリを実行できます。

このチュートリアルの残りの部分では、Elasticsearch の起動と実行プロセスを説明し、データのインデックス作成、検索、変更などの基本的な操作をいくつか紹介します。このチュートリアルを終えると、Elasticsearch とは何か、そしてそれがどのように機能するのかをより深く理解できるようになります。洗練された検索アプリケーションを構築し、データから有用なものを発見するためにこれを使用するインスピレーションを得ていただければ幸いです。

基本概念 (基本概念)

Elasticsearch の中核となる概念がいくつかあります。 これらの概念を最初から理解することは、後の学習に非常に役立ちます。

準リアルタイム (NRT)

Elasticsearch は、準リアルタイムの検索プラットフォームです。これは、ドキュメントのインデックスが作成されてから検索可能になるまでに、わずかな遅延 (通常は 1 秒) しかないことを意味します。

クラスター (クラスター)

クラスターは、すべてのデータを保存するために結合され、すべてのノードでインデックス作成と検索操作を実行できる 1 つ以上のノード (サーバー) の集合です。クラスターは一意の名前で識別され、デフォルトでは「elasticsearch」になります。ノードは 1 つのクラスターにのみ所属できるため、クラスター名に従ってクラスターに参加します。だから名前は大事なんです。

異なる環境で同じクラスター名を使用しないでください。使用すると、間違ったクラスターが追加される可能性があります。たとえば、クラスター名 logging-dev 、logging-stage、logging-prod を開発環境、ステージング環境、運用環境でそれぞれ使用できます。

ノードが 1 つだけあるクラスターは有効で完璧であることに注意してください。複数の独立したクラスターを作成し、それぞれに独自の一意のクラスター名を付けることもできます。

ノード (ノード)

ノードは、クラスターの一部であり、データを保存し、クラスターのインデックス作成と検索に参加する単一のサーバーです。クラスターと同様に、ノードも一意の名前によって区別されます。デフォルト名はランダムな UUID (Universally Unique IDentifier) であり、サーバーの起動時にノードに設定されます。デフォルト値を使用したくない場合は、ノード名をカスタマイズすることもできます。名前は、クラスター内の各サーバーに対応するノードを識別するのに役立つため、管理者にとって非常に重要です。

クラスター名を設定することで、ノードは指定されたクラスターに参加できます。デフォルトでは、ノードは elasticsearch というクラスターに参加します。これは、ネットワーク内で多数のノードを起動し、それらがすべて相互に通信できる場合、自動的に elasticsearch クラスターというクラスターに追加されます。 。

インデックス (インデックス)

インデックス は、特定の類似した特徴を持つドキュメントのコレクションです。たとえば、顧客データ インデックス、製品カタログ インデックス、注文データ インデックスなどです。インデックスは、ドキュメントのインデックス作成、検索、更新、削除時に使用される名前 (すべて小文字である必要があります) によって識別されます。単一クラスター内で、必要な数のインデックスを定義できます。

Type

インデックスは 1 つ以上のタイプを定義できます。タイプとは、インデックスの論理的なカテゴリ/パーティションであり、どのようなものであるかは任意です。通常、タイプは、共通のフィールドのセットを持つドキュメントに対して定義されます。たとえば、ブログ プラットフォームでは、すべてのデータが 1 つのインデックスに保存される場合があります。このインデックスでは、ユーザー データ タイプ、ブログ データ タイプ、およびコメント データ タイプを定義できます。

ドキュメント

ドキュメントはインデックスを作成できる基本単位です。たとえば、ドキュメントを使用して顧客に関するデータを保存したり、単一の製品に関するデータを保存したり、単一の注文に関するデータを保存したりできます。ドキュメントは JSON を使用して表現されます。多数のドキュメントをインデックス/タイプに保存できます。ドキュメントは基本的にインデックスに格納されますが、実際にはインデックスが作成され、インデックス内のタイプに割り当てられることに注意してください。

シャードとレプリカ

インデックスには大量のデータが保存される場合があり、そのデータは単一ノードのハードディスク容量を超える可能性があります。たとえば、インデックスには 10 億のドキュメントが保存され、1 TB のハード ディスク領域が占有されます。このような大量のデータを保存するには、1 つのノードのハード ディスクでは十分ではない可能性があります。サーバーの検索リクエストの処理速度。

この問題を解決するために、elasticsearchはインデックスを細分化するシャーディング機能を提供します。インデックスを作成するときは、必要なシャードの数を簡単に定義できます。各シャード自体にはインデックスのすべての機能があり、クラスター内の任意のノードに保存できます。

シャーディングは 2 つの主な理由で重要です:

  • コンテンツ ボリュームを水平方向に分割/スケーリングできます

  • 複数のノードのシャード間で操作を並行して分散できるため、パフォーマンスを向上させたり、スループット。

シャード分散のメカニズム、およびそのドキュメントがどのように検索リクエストに集約されるかは、Elasticsearch によって完全に管理され、ユーザーには透過的です。

いつでも障害が発生する可能性があるネットワーク/クラウド環境では、シャーディングは非常に役立ちます。シャード/ノードがオフラインになったり消失したりするのを防ぐために、フェイルオーバー メカニズムを強くお勧めします。これを行うために、elasticsearch を使用して、インデックスのシャードの 1 つ以上のコピー (いわゆる複製されたシャード、または単にレプリカ) を作成できます。

レプリカは 2 つの主な理由で重要です:

  • シャード/ノードに障害が発生した場合に高可用性を提供するため。したがって、レプリカは、コピー元のオリジナル/プライマリ シャードと同じノードには割り当てることができないことに注意することが重要です。

  • すべてのレプリカに対して並行して検索を実行できるため、検索ボリューム/スループットをスケールすることができます。

要約すると、各インデックスは複数のシャードに分割できます。各インデックスは、ゼロ回 (コピーなし) または複数回複製することもできます。レプリケートされると、各インデックスにはプライマリ シャード (レプリケートされた元のシャード) とセカンダリ シャード (プライマリ シャードのコピー) が含まれます。シャードとレプリカの数は、インデックスの作成時にインデックスごとに定義できます。インデックスを作成した後は、いつでもレプリカの数を動的に変更できますが、その後シャードの数を変更することはできません。

デフォルトでは、各インデックスには 5 つのプライマリ シャードと 1 つのレプリカ シャードが割り当てられます。つまり、クラスター内に 2 つのノードがある場合、インデックスには 5 つのプライマリ シャードと 5 つのレプリカ シャードがあり、合計 10 のシャードが存在します。

各 elasticsearch シャードは Lucene インデックスです。LUCENE-5843 では、最大 2,147,483,519 (= Integer.MAX_VALUE - 128) 個のドキュメントを含めることができます。シャード サイズを監視するには、_cat/shards API を使用できます。 。

概要

1. 検索にリレーショナル データベースを使用してみてはいかがでしょうか?検索の実装にはデータベースが使用されるため、パフォーマンスが非常に低くなり、単語の分割検索は実行できません。

2. 全文検索、転置インデックス、Lucene とは何ですか?すでに前の方がまとめていますので、ぜひ参考にしてください 【段階的に全文検索を教えます】Apache Lucene の下調べ

3. Elasticsearch の特徴

  • クラスターに分散して大量のデータを処理できるほぼリアルタイムで

  • ユーザーにとっては、箱から出してすぐに使用するのが非常に簡単です。データ量が大きくなければ、操作はそれほど複雑ではありません。

  • には、全文検索、同義語処理、関連性ランキング、複雑なデータ分析、準実数など、リレーショナルデータベースにはない機能があります。大量のデータの時間処理

  • Lucene に基づいて、複雑さを隠し、シンプルで使いやすい RESTful API インターフェイスと Java API インターフェイスを提供します

4。クラスター: クラスターには複数のノードが含まれており、各ノードがどのクラスターに属するかは構成によって決まります (デフォルトは elasticsearch)

  • ノード: クラスター内のノードは、クラスター内の「elasticsearch」という名前のクラスターに自動的に参加します。デフォルト。 elasticsearch サービスはノードです。たとえば、マシンが 2 つの es サービスを開始すると、2 つのノードが存在します。

  • インデックス: mysql データベースに相当するインデックスには、同様の構造を持つドキュメント データの束が含まれています。

  • タイプ: インデックス内の論理データ分類である mysql テーブルに相当するタイプ。

  • ドキュメント: ドキュメントは、MySQL テーブルのレコードの行に相当し、ES の最小のデータ単位です。

  • シャード: 単一のマシンでは大量のデータを保存できません。ES はインデックス内のデータを複数のシャードに分割し、複数のサーバーに分散して保存できます。

  • レプリカ: レプリカ。ダウンタイムとシャードの損失を防ぐため、最小の高可用性構成は 2 サーバーです。

以上がエラスティックサーチとは何ですか? Elasticsearch はどこで使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。