2

これは私の以前の質問の続きです。削除されたドキュメント数の膨大な数は、ES インデックスで削除されたドキュメントに関連する ES クエリのパフォーマンスに影響します。

回答で指摘されているように、強制マージ APIを使用できないES 1.X バージョンを使用しているため、最適化 APIを使用しましたが、Say による最適化 API github リンク (ES サイトで見つからなかったため、以前に提供されたもの) について読んだ後エラスティックのバノン創始者は、同じ仕事をしているように見えます。

最適化 API を実行した後、インデックスの成功メッセージが表示されましたが、削除されたドキュメントの合計数が減少している様子が見られず、セグメント APIを使用してインデックスのセグメントを確認したところ、25 を超えていることがわかりました。各シャードのセグメントとすべてのシャードは、メモリ内に 250 ~ 1 GB のデータとほぼ 500,000 のドキュメントを保持していますが、削除されたドキュメントがほとんどないシャードがいくつかあることがわかります。

だから私の質問は:

  1. 私のインデックスには複数のデータ ノードにまたがる複数のシャードがあり、1 つのノード URL のみを使用して最適化 API を実行すると、そのノードのセグメントのみがマージされますか?
  2. セグメント API の結果では、node-id が のよう"node": "f2hsqeamadnaskda"に表示されますが、私は KOPF プラグインを使用しており、データ ノードにカスタム名を付けています。したがって、この不可解なノード名を人間が読めるノード名に関連付けて、ステートメント 1 が正しいかどうかを識別するにはどうすればよいですか?いいえ?
  3. オプティマイズ API に関するドキュメントはありませんが、すべてのノードのすべてのシャードのセグメントを一度にマージすることはできますか? 適用する前にインデックスを読み取り専用にする必要がありますか?
4

2 に答える 2

0

@Nirmal が最初の 2 つの質問に答えたので、次のようになります。

  1. オプティマイズ API に関するドキュメントはありませんが、すべてのノードのすべてのシャードのセグメントを一度にマージすることはできますか? 適用する前にインデックスを読み取り専用にする必要がありますか?

1.x で利用可能なドキュメントがあります: https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-optimize.html。おそらく次のような呼び出しを探しています。

  • GET <index_pattern>/_cat/segments: すべてのシャードのすべてのセグメントを一覧表示します (数千の場合もあります)。削除されたドキュメントもリストします。
  • POST <index_pattern>/_optimize?max_num_segments=1: すべてのセグメントを強制的にマージして、シャードごとに 1 つのセグメントにします。これは、インデックスが書き込まれなくなったときに行います。データ ノードの CPU/RAM の負荷を軽減するのに役立ちます。
  • POST <index_pattern>/_optimize?only_expunge_deletes=true: 削除されたドキュメントのみを削除します

最後に、*as<index_pattern>を使用して、クラスター全体のすべてのインデックスを実行できます。

于 2020-02-17T12:38:29.650 に答える