インデックス設定の更新API
リアルタイムで動的インデックス設定を変更します。
データストリームの場合、インデックス設定の変更はデフォルトですべてのバックインデックスに適用されます。
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index": {
"number_of_replicas": 2
}
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
index: {
number_of_replicas: 2
}
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
index: {
number_of_replicas: 2,
},
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index" : {
"number_of_replicas" : 2
}
}
リクエスト
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
- 隠れたデータストリームと隠れたインデックスに一致します。
open
、closed
、またはその両方と組み合わせる必要があります。 none
- ワイルドカードパターンは受け付けられません。
デフォルトはopen
です。
flat_settings
- (オプション、ブール値)
true
の場合、設定をフラット形式で返します。デフォルトはfalse
です。 ignore_unavailable
- (オプション、ブール値)
false
の場合、リクエストは欠落またはクローズされたインデックスを対象とする場合にエラーを返します。デフォルトはfalse
です。 preserve_existing
- (オプション、ブール値)
true
の場合、既存のインデックス設定は変更されません。デフォルトはfalse
です。 reopen
- (オプション、ブール値)
true
の場合、通常はクローズされたインデックスでのみ更新される静的設定が、影響を受けるインデックスを自動的にクローズして再オープンすることによって更新されます。false
の場合、オープンインデックスで静的設定を更新しようとすると失敗します。デフォルトはfalse
です。
- `````master_timeout
- (オプション、時間単位)マスターノードを待機する期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーを返します。デフォルトは
30s
です。リクエストがタイムアウトしないことを示すために-1
に設定することもできます。 timeout
- (オプション、時間単位)クラスタメタデータを更新した後、クラスタ内のすべての関連ノードからの応答を待機する期間。タイムアウトが切れる前に応答が受信されない場合、クラスタメタデータの更新は適用されますが、応答は完全に承認されなかったことを示します。デフォルトは
30s
です。リクエストがタイムアウトしないことを示すために-1
に設定することもできます。
リクエストボディ
settings
- (オプション、インデックス設定オブジェクト)インデックスの構成オプション。インデックス設定を参照してください。
例
インデックス設定のリセット
設定をデフォルト値に戻すには、null
を使用します。例えば:
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index": {
"refresh_interval": None
}
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
index: {
refresh_interval: nil
}
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
index: {
refresh_interval: null,
},
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index" : {
"refresh_interval" : null
}
}
ライブインデックスで動的に更新できるインデックスごとの設定のリストは、インデックスモジュールで見つけることができます。既存の設定が更新されないようにするには、preserve_existing
リクエストパラメータをtrue
に設定できます。
バルクインデックスの使用
たとえば、更新設定APIを使用して、バルクインデックス用によりパフォーマンスを向上させるようにインデックスを動的に変更し、その後、よりリアルタイムのインデックス状態に移行できます。バルクインデックスが開始される前に、次のように使用します:
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index": {
"refresh_interval": "-1"
}
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
index: {
refresh_interval: '-1'
}
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
index: {
refresh_interval: "-1",
},
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index" : {
"refresh_interval" : "-1"
}
}
(別の最適化オプションは、レプリカなしでインデックスを開始し、後で追加することですが、それは本当にユースケースに依存します)。
その後、バルクインデックスが完了したら、設定を更新できます(たとえば、デフォルトに戻す):
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index": {
"refresh_interval": "1s"
}
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
index: {
refresh_interval: '1s'
}
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
index: {
refresh_interval: "1s",
},
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index" : {
"refresh_interval" : "1s"
}
}
そして、強制マージを呼び出す必要があります:
Python
resp = client.indices.forcemerge(
index="my-index-000001",
max_num_segments="5",
)
print(resp)
Ruby
response = client.indices.forcemerge(
index: 'my-index-000001',
max_num_segments: 5
)
puts response
Js
const response = await client.indices.forcemerge({
index: "my-index-000001",
max_num_segments: 5,
});
console.log(response);
コンソール
POST /my-index-000001/_forcemerge?max_num_segments=5
インデックス分析の更新
新しいアナライザーはクローズされたインデックスでのみ定義できます。
アナライザーを追加するには、インデックスをクローズし、アナライザーを定義し、インデックスを再オープンする必要があります。
データストリームの書き込みインデックスをクローズすることはできません。
データストリームの書き込みインデックスと将来のバックインデックスのアナライザーを更新するには、ストリームで使用されるインデックステンプレートでアナライザーを更新します。その後、データストリームをロールオーバーして、新しいアナライザーをストリームの書き込みインデックスと将来のバックインデックスに適用します。これは、ロールオーバー後にストリームに追加された新しいデータや検索に影響します。ただし、データストリームのバックインデックスや既存のデータには影響しません。
既存のバックインデックスのアナライザーを変更するには、新しいデータストリームを作成し、データを再インデックスする必要があります。再インデックスを使用してマッピングや設定を変更するを参照してください。
たとえば、次のコマンドはcontent
アナライザーをmy-index-000001
インデックスに追加します:
Python
resp = client.indices.close(
index="my-index-000001",
)
print(resp)
resp1 = client.indices.put_settings(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"content": {
"type": "custom",
"tokenizer": "whitespace"
}
}
}
},
)
print(resp1)
resp2 = client.indices.open(
index="my-index-000001",
)
print(resp2)
Ruby
response = client.indices.close(
index: 'my-index-000001'
)
puts response
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
analysis: {
analyzer: {
content: {
type: 'custom',
tokenizer: 'whitespace'
}
}
}
}
)
puts response
response = client.indices.open(
index: 'my-index-000001'
)
puts response
Js
const response = await client.indices.close({
index: "my-index-000001",
});
console.log(response);
const response1 = await client.indices.putSettings({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
content: {
type: "custom",
tokenizer: "whitespace",
},
},
},
},
});
console.log(response1);
const response2 = await client.indices.open({
index: "my-index-000001",
});
console.log(response2);
コンソール
POST /my-index-000001/_close
PUT /my-index-000001/_settings
{
"analysis" : {
"analyzer":{
"content":{
"type":"custom",
"tokenizer":"whitespace"
}
}
}
}
POST /my-index-000001/_open