2016-06-30 10 views

答えて

0

弾性検索プロセスは、同じ方法で検索(クエリ)と集計を処理します。散布してから収集します。

着信要求を受信する最初のノードは、調整ノードとして機能します。調整ノードの仕事は、リクエストを解析し、必要に応じてルーティングします(必要な場合)。ルーティングの場合は、何が起きているかによって異なりますが、クエリや集約では、使用されているすべてのインデックスの破片に移動する必要があります。

3つのノードクラスタ想像:あなたは2つの破片や1つのレプリカと指数(2 * (2 + (2 * 1))総破片、これを持っている場合は

  • node1
  • node2
  • node3

を8)、単純なレイアウトは次のようになります。

  • node1
  • node2
  • node3 index1_shard0p index0_shard0r、index0_shard1pは、

index1_shard1p、index1_shard0rを持っていindex1_shard1r(注:それは完全にバランスがとれていないですが、それは大丈夫です)、index0_shard0p、index0_shard1rを持って

node2に、の両方の結果を集計するリクエストがあった場合インデックスの場合、その要求の調整ノードになります。

  1. これらのインデックスシャードがどこにあるのかを理解するためにクラスタの状態を確認します。
  2. 各シャードにプライマリとレプリカを使用するかどうかを実際に任意に選択します。
  3. クエリフェーズを送信します。
  4. シャードごとの結果を受け取ります。
  5. 結果を結合します(たとえば、各シャードのトップ10から実際のトップ10を見つける)。
  6. フェッチフェーズを送信します(フェードフェーズを持つシャードから実際のドキュメントを取得します)。
  7. 応答を送り返します。

クエリは、既知のようにフェッチフェーズを実行する方法です。シャードは他のシャードの存在を知らないので、クエリーフェーズは実際にはが必要なものと比較して余分なデータを処理していることを意味します。これについては、terms aggregation documentationで詳細に説明しています。

関連する問題