インデックス設定の更新API

リアルタイムで動的インデックス設定を変更します。

データストリームの場合、インデックス設定の変更はデフォルトですべてのバックインデックスに適用されます。

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index": {
  5. "number_of_replicas": 2
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. index: {
  5. number_of_replicas: 2
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. index: {
  5. number_of_replicas: 2,
  6. },
  7. },
  8. });
  9. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index" : {
  4. "number_of_replicas" : 2
  5. }
  6. }

リクエスト

PUT /<target>/_settings

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、ターゲットデータストリーム、インデックス、またはエイリアスに対してmanage インデックス権限を持っている必要があります。

パスパラメータ

  • <target>
  • (オプション、文字列)リクエストを制限するために使用されるデータストリーム、インデックス、およびエイリアスのカンマ区切りリスト。ワイルドカード(*)をサポートします。すべてのデータストリームとインデックスを対象とするには、このパラメータを省略するか、*または_allを使用します。

クエリパラメータ

  • allow_no_indices
  • (オプション、ブール値)falseの場合、リクエストは、ワイルドカード式、インデックスエイリアス、または_allの値が欠落または閉じたインデックスのみを対象とする場合にエラーを返します。この動作は、リクエストが他のオープンインデックスを対象としている場合でも適用されます。たとえば、foo*,bar*を対象とするリクエストは、fooで始まるインデックスがあるが、barで始まるインデックスがない場合にエラーを返します。
    デフォルトはfalseです。
  • expand_wildcards
  • (オプション、文字列)ワイルドカードパターンが一致できるインデックスのタイプ。リクエストがデータストリームを対象とできる場合、この引数はワイルドカード式が隠れたデータストリームに一致するかどうかを決定します。カンマ区切りの値(open,hiddenなど)をサポートします。有効な値は:
    • all
    • すべてのデータストリームまたはインデックスに一致し、隠れたものも含まれます。
    • open
    • オープンで非隠れたインデックスに一致します。また、非隠れたデータストリームにも一致します。
    • closed
    • クローズされた非隠れたインデックスに一致します。また、非隠れたデータストリームにも一致します。データストリームはクローズできません。
    • hidden
    • 隠れたデータストリームと隠れたインデックスに一致します。openclosed、またはその両方と組み合わせる必要があります。
    • none
    • ワイルドカードパターンは受け付けられません。
      デフォルトはopenです。
  • flat_settings
  • (オプション、ブール値)trueの場合、設定をフラット形式で返します。デフォルトはfalseです。
  • ignore_unavailable
  • (オプション、ブール値)falseの場合、リクエストは欠落またはクローズされたインデックスを対象とする場合にエラーを返します。デフォルトはfalseです。
  • preserve_existing
  • (オプション、ブール値)trueの場合、既存のインデックス設定は変更されません。デフォルトはfalseです。
  • reopen
  • (オプション、ブール値)trueの場合、通常はクローズされたインデックスでのみ更新される静的設定が、影響を受けるインデックスを自動的にクローズして再オープンすることによって更新されます。falseの場合、オープンインデックスで静的設定を更新しようとすると失敗します。デフォルトはfalseです。
  1. - `````master_timeout
  • (オプション、時間単位)マスターノードを待機する期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーを返します。デフォルトは30sです。リクエストがタイムアウトしないことを示すために-1に設定することもできます。
  • timeout
  • (オプション、時間単位)クラスタメタデータを更新した後、クラスタ内のすべての関連ノードからの応答を待機する期間。タイムアウトが切れる前に応答が受信されない場合、クラスタメタデータの更新は適用されますが、応答は完全に承認されなかったことを示します。デフォルトは30sです。リクエストがタイムアウトしないことを示すために-1に設定することもできます。

リクエストボディ

インデックス設定のリセット

設定をデフォルト値に戻すには、nullを使用します。例えば:

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index": {
  5. "refresh_interval": None
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. index: {
  5. refresh_interval: nil
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. index: {
  5. refresh_interval: null,
  6. },
  7. },
  8. });
  9. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index" : {
  4. "refresh_interval" : null
  5. }
  6. }

ライブインデックスで動的に更新できるインデックスごとの設定のリストは、インデックスモジュールで見つけることができます。既存の設定が更新されないようにするには、preserve_existingリクエストパラメータをtrueに設定できます。

バルクインデックスの使用

たとえば、更新設定APIを使用して、バルクインデックス用によりパフォーマンスを向上させるようにインデックスを動的に変更し、その後、よりリアルタイムのインデックス状態に移行できます。バルクインデックスが開始される前に、次のように使用します:

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index": {
  5. "refresh_interval": "-1"
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. index: {
  5. refresh_interval: '-1'
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. index: {
  5. refresh_interval: "-1",
  6. },
  7. },
  8. });
  9. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index" : {
  4. "refresh_interval" : "-1"
  5. }
  6. }

(別の最適化オプションは、レプリカなしでインデックスを開始し、後で追加することですが、それは本当にユースケースに依存します)。

その後、バルクインデックスが完了したら、設定を更新できます(たとえば、デフォルトに戻す):

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index": {
  5. "refresh_interval": "1s"
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. index: {
  5. refresh_interval: '1s'
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. index: {
  5. refresh_interval: "1s",
  6. },
  7. },
  8. });
  9. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index" : {
  4. "refresh_interval" : "1s"
  5. }
  6. }

そして、強制マージを呼び出す必要があります:

Python

  1. resp = client.indices.forcemerge(
  2. index="my-index-000001",
  3. max_num_segments="5",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.forcemerge(
  2. index: 'my-index-000001',
  3. max_num_segments: 5
  4. )
  5. puts response

Js

  1. const response = await client.indices.forcemerge({
  2. index: "my-index-000001",
  3. max_num_segments: 5,
  4. });
  5. console.log(response);

コンソール

  1. POST /my-index-000001/_forcemerge?max_num_segments=5

インデックス分析の更新

新しいアナライザーはクローズされたインデックスでのみ定義できます。

アナライザーを追加するには、インデックスをクローズし、アナライザーを定義し、インデックスを再オープンする必要があります。

データストリームの書き込みインデックスをクローズすることはできません。

データストリームの書き込みインデックスと将来のバックインデックスのアナライザーを更新するには、ストリームで使用されるインデックステンプレートでアナライザーを更新します。その後、データストリームをロールオーバーして、新しいアナライザーをストリームの書き込みインデックスと将来のバックインデックスに適用します。これは、ロールオーバー後にストリームに追加された新しいデータや検索に影響します。ただし、データストリームのバックインデックスや既存のデータには影響しません。

既存のバックインデックスのアナライザーを変更するには、新しいデータストリームを作成し、データを再インデックスする必要があります。再インデックスを使用してマッピングや設定を変更するを参照してください。

たとえば、次のコマンドはcontentアナライザーをmy-index-000001インデックスに追加します:

Python

  1. resp = client.indices.close(
  2. index="my-index-000001",
  3. )
  4. print(resp)
  5. resp1 = client.indices.put_settings(
  6. index="my-index-000001",
  7. settings={
  8. "analysis": {
  9. "analyzer": {
  10. "content": {
  11. "type": "custom",
  12. "tokenizer": "whitespace"
  13. }
  14. }
  15. }
  16. },
  17. )
  18. print(resp1)
  19. resp2 = client.indices.open(
  20. index="my-index-000001",
  21. )
  22. print(resp2)

Ruby

  1. response = client.indices.close(
  2. index: 'my-index-000001'
  3. )
  4. puts response
  5. response = client.indices.put_settings(
  6. index: 'my-index-000001',
  7. body: {
  8. analysis: {
  9. analyzer: {
  10. content: {
  11. type: 'custom',
  12. tokenizer: 'whitespace'
  13. }
  14. }
  15. }
  16. }
  17. )
  18. puts response
  19. response = client.indices.open(
  20. index: 'my-index-000001'
  21. )
  22. puts response

Js

  1. const response = await client.indices.close({
  2. index: "my-index-000001",
  3. });
  4. console.log(response);
  5. const response1 = await client.indices.putSettings({
  6. index: "my-index-000001",
  7. settings: {
  8. analysis: {
  9. analyzer: {
  10. content: {
  11. type: "custom",
  12. tokenizer: "whitespace",
  13. },
  14. },
  15. },
  16. },
  17. });
  18. console.log(response1);
  19. const response2 = await client.indices.open({
  20. index: "my-index-000001",
  21. });
  22. console.log(response2);

コンソール

  1. POST /my-index-000001/_close
  2. PUT /my-index-000001/_settings
  3. {
  4. "analysis" : {
  5. "analyzer":{
  6. "content":{
  7. "type":"custom",
  8. "tokenizer":"whitespace"
  9. }
  10. }
  11. }
  12. }
  13. POST /my-index-000001/_open