Elasticsearchでプライマリシャード数を増やす方法

Elasticsearch でプライマリ シャード数を増やす方法を検討します。

Elasticsearchは初めてですか?Elasticsearchを使い始めるウェビナーに参加しましょう。無料のクラウドトライアルを始めるか、今すぐマシンでElasticを試すこともできます。

既存のインデックスのプライマリ シャード数を増やすことはできません。つまり、プライマリ シャード数を増やす場合は、インデックスを再作成する必要があります。このような状況で一般的に使用される方法は 2 つあります。_reindex API と _split API です。

_split API は、多くの場合、_reindex API よりも高速な方法です。両方の操作の前にインデックス作成を停止する必要があります。そうしないと、source_index と target_index のドキュメント数が異なります。

方法1 – 分割APIを使用する

分割 API は、設定をコピーし、既存のインデックスをマッピングすることで、必要な数のプライマリ シャードを持つ新しいインデックスを作成するために使用されます。作成時に必要なプライマリ シャードの数を設定できます。分割 API を実装する前に、次の設定を確認する必要があります。

  1. ソース インデックスは読み取り専用である必要があります。これは、インデックス作成プロセスを停止する必要があることを意味します。
  2. ターゲット インデックス内のプライマリ シャードの数は、ソース インデックス内のプライマリ シャードの数の倍数である必要があります。たとえば、ソース インデックスに 5 つのプライマリ シャードがある場合、ターゲット インデックスのプライマリ シャードを 10、15、20 などに設定できます。

注: プライマリ シャード番号のみを変更する必要がある場合は、再インデックス API よりもはるかに高速な分割 API が推奨されます。

分割APIの実装

テストインデックスを作成します。

分割するには、ソース インデックスが読み取り専用である必要があります。

設定とマッピングはソース インデックスから自動的にコピーされます。

進捗状況は以下で確認できます:

設定とマッピングはソース インデックスからコピーされるため、ターゲット インデックスは読み取り専用になります。ターゲット インデックスへの書き込み操作を有効にしましょう。

元のインデックスを削除する前に、ソース インデックスとターゲット インデックスの docs.count を確認します。

インデックス名とエイリアス名を同じにすることはできません。ソース インデックスを削除し、ソース インデックス名をターゲット インデックスのエイリアスとして追加する必要があります。

test_split_sourceエイリアスをtest_split_targetインデックスに追加した後、次のようにテストする必要があります。

方法2 – 再インデックスAPIを使用する

Reindex API を使用して新しいインデックスを作成すると、任意の数のプライマリ シャード カウントを指定できます。意図した数のプライマリ シャードで新しいインデックスを作成した後、ソース インデックス内のすべてのデータをこの新しいインデックスに再インデックスできます。

分割 API 機能に加えて、再インデックス AP の ingest_pipeline を使用してデータを操作することもできます。取り込みパイプラインでは、フィルターに適合する指定されたフィールドのみがクエリを使用してターゲット インデックスにインデックス付けされます。データの内容は簡単なスクリプトを使用して変更でき、複数のインデックスを 1 つのインデックスにマージできます。

再インデックスAPIの実装

テストの再インデックスを作成します。

ソース インデックスから設定とマッピングをコピーします。

設定、マッピング、および必要なシャード数を使用してターゲット インデックスを作成します。

*注: number_of_replicas: 0 および refresh_interval: -1 を設定すると、再インデックスの速度が向上します。

再インデックスプロセスを開始します。requests_per_second=-1 および slices=auto を設定すると、再インデックス速度が調整されます。

再インデックス API を実行すると、task_id が表示されます。それをコピーして、_tasks API で確認します。

再インデックスが完了したら設定を更新します。

元のインデックスを削除する前に、ソース インデックスとターゲット インデックスの docs.count が同じであることを確認します。

インデックス名とエイリアス名を同じにすることはできません。ソース インデックスを削除し、ソース インデックス名をターゲット インデックスのエイリアスとして追加します。

test_split_source エイリアスを test_split_target インデックスに追加した後、次のコマンドを使用してテストします。

まとめ

既存のインデックスのプライマリ シャード数を増やす場合は、新しいインデックスへの設定とマッピングを再作成する必要があります。これを行うには、主に reindex API と split API という 2 つの方法があります。どちらの方法を使用する前にも、アクティブなインデックス作成を停止する必要があります。

関連記事

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう