データストリームの変更
データストリームのマッピングと設定を変更する
各data streamには、一致するインデックステンプレートがあります。このテンプレートのマッピングとインデックス設定は、ストリームのために作成された新しいバックインデックスに適用されます。これには、ストリームが作成されたときに自動生成されるストリームの最初のバックインデックスが含まれます。
データストリームを作成する前に、このテンプレートに含めるマッピングと設定を慎重に検討することをお勧めします。
後でデータストリームのマッピングや設定を変更する必要がある場合、いくつかのオプションがあります:
- データストリームに新しいフィールドマッピングを追加する
- データストリーム内の既存のフィールドマッピングを変更する
- データストリームの動的インデックス設定を変更する
- データストリームの静的インデックス設定を変更する
変更に既存のフィールドマッピングや静的インデックス設定の修正が含まれる場合、データストリームのバックインデックスに変更を適用するには、再インデックスが必要になることがよくあります。すでに再インデックスを実行している場合は、同じプロセスを使用して新しいフィールドマッピングを追加し、動的インデックス設定を変更できます。再インデックスを使用してマッピングや設定を変更するを参照してください。
データストリームに新しいフィールドマッピングを追加する
データストリームに新しいフィールドのマッピングを追加するには、次の手順に従います:
- 1. データストリームで使用されるインデックステンプレートを更新します。これにより、新しいフィールドマッピングがストリームのために作成される将来のバックインデックスに追加されます。
たとえば、my-data-stream-template
はmy-data-stream
で使用される既存のインデックステンプレートです。
次のインデックステンプレートの作成または更新リクエストは、message
という新しいフィールドのマッピングをテンプレートに追加します。
Python
resp = client.indices.put_index_template(
name="my-data-stream-template",
index_patterns=[
"my-data-stream*"
],
data_stream={},
priority=500,
template={
"mappings": {
"properties": {
"message": {
"type": "text"
}
}
}
},
)
print(resp)
Ruby
response = client.indices.put_index_template(
name: 'my-data-stream-template',
body: {
index_patterns: [
'my-data-stream*'
],
data_stream: {},
priority: 500,
template: {
mappings: {
properties: {
message: {
type: 'text'
}
}
}
}
}
)
puts response
Js
const response = await client.indices.putIndexTemplate({
name: "my-data-stream-template",
index_patterns: ["my-data-stream*"],
data_stream: {},
priority: 500,
template: {
mappings: {
properties: {
message: {
type: "text",
},
},
},
},
});
console.log(response);
Console
PUT /_index_template/my-data-stream-template
{
"index_patterns": [ "my-data-stream*" ],
"data_stream": { },
"priority": 500,
"template": {
"mappings": {
"properties": {
"message": {
"type": "text"
}
}
}
}
}
新しいmessage フィールドのマッピングを追加します。 |
- 2. 更新マッピングAPIを使用して、新しいフィールドマッピングをデータストリームに追加します。デフォルトでは、これによりストリームの既存のバックインデックス、書き込みインデックスを含むマッピングが追加されます。
次の更新マッピングAPIリクエストは、message
フィールドマッピングをmy-data-stream
に追加します。
Python
resp = client.indices.put_mapping(
index="my-data-stream",
properties={
"message": {
"type": "text"
}
},
)
print(resp)
Ruby
response = client.indices.put_mapping(
index: 'my-data-stream',
body: {
properties: {
message: {
type: 'text'
}
}
}
)
puts response
Js
const response = await client.indices.putMapping({
index: "my-data-stream",
properties: {
message: {
type: "text",
},
},
});
console.log(response);
Console
PUT /my-data-stream/_mapping
{
"properties": {
"message": {
"type": "text"
}
}
}
ストリームの書き込みインデックスにのみマッピングを追加するには、更新マッピングAPIのwrite_index_only
クエリパラメータをtrue
に設定します。
次の更新マッピングリクエストは、my-data-stream
の書き込みインデックスにのみ新しいmessage
フィールドマッピングを追加します。新しいフィールドマッピングは、ストリームの他のバックインデックスには追加されません。
Python
resp = client.indices.put_mapping(
index="my-data-stream",
write_index_only=True,
properties={
"message": {
"type": "text"
}
},
)
print(resp)
Ruby
response = client.indices.put_mapping(
index: 'my-data-stream',
write_index_only: true,
body: {
properties: {
message: {
type: 'text'
}
}
}
)
puts response
Js
const response = await client.indices.putMapping({
index: "my-data-stream",
write_index_only: "true",
properties: {
message: {
type: "text",
},
},
});
console.log(response);
Console
PUT /my-data-stream/_mapping?write_index_only=true
{
"properties": {
"message": {
"type": "text"
}
}
}
データストリーム内の既存のフィールドマッピングを変更する
各mapping parameterのドキュメントには、update mapping APIを使用して既存のフィールドを更新できるかどうかが示されています。既存のフィールドのこれらのパラメータを更新するには、次の手順に従います:
- 1. データストリームで使用されるインデックステンプレートを更新します。これにより、更新されたフィールドマッピングがストリームのために作成される将来のバックインデックスに追加されます。
たとえば、my-data-stream-template
はmy-data-stream
で使用される既存のインデックステンプレートです。
次のインデックステンプレートの作成または更新リクエストは、host.ip
フィールドのignore_malformed
マッピングパラメータの引数をtrue
に変更します。
Python
resp = client.indices.put_index_template(
name="my-data-stream-template",
index_patterns=[
"my-data-stream*"
],
data_stream={},
priority=500,
template={
"mappings": {
"properties": {
"host": {
"properties": {
"ip": {
"type": "ip",
"ignore_malformed": True
}
}
}
}
}
},
)
print(resp)
Ruby
response = client.indices.put_index_template(
name: 'my-data-stream-template',
body: {
index_patterns: [
'my-data-stream*'
],
data_stream: {},
priority: 500,
template: {
mappings: {
properties: {
host: {
properties: {
ip: {
type: 'ip',
ignore_malformed: true
}
}
}
}
}
}
}
)
puts response
Js
const response = await client.indices.putIndexTemplate({
name: "my-data-stream-template",
index_patterns: ["my-data-stream*"],
data_stream: {},
priority: 500,
template: {
mappings: {
properties: {
host: {
properties: {
ip: {
type: "ip",
ignore_malformed: true,
},
},
},
},
},
},
});
console.log(response);
Console
PUT /_index_template/my-data-stream-template
{
"index_patterns": [ "my-data-stream*" ],
"data_stream": { },
"priority": 500,
"template": {
"mappings": {
"properties": {
"host": {
"properties": {
"ip": {
"type": "ip",
"ignore_malformed": true
}
}
}
}
}
}
}
host.ip フィールドのignore_malformed 値をtrue に変更します。 |
- 2. update mapping APIを使用して、データストリームにマッピングの変更を適用します。デフォルトでは、これによりストリームの既存のバックインデックス、書き込みインデックスを含む変更が適用されます。
次のupdate mapping APIリクエストはmy-data-stream
をターゲットにします。このリクエストは、host.ip
フィールドのignore_malformed
マッピングパラメータの引数をtrue
に変更します。
Python
resp = client.indices.put_mapping(
index="my-data-stream",
properties={
"host": {
"properties": {
"ip": {
"type": "ip",
"ignore_malformed": True
}
}
}
},
)
print(resp)
Ruby
response = client.indices.put_mapping(
index: 'my-data-stream',
body: {
properties: {
host: {
properties: {
ip: {
type: 'ip',
ignore_malformed: true
}
}
}
}
}
)
puts response
Js
const response = await client.indices.putMapping({
index: "my-data-stream",
properties: {
host: {
properties: {
ip: {
type: "ip",
ignore_malformed: true,
},
},
},
},
});
console.log(response);
Console
PUT /my-data-stream/_mapping
{
"properties": {
"host": {
"properties": {
"ip": {
"type": "ip",
"ignore_malformed": true
}
}
}
}
}
ストリームの書き込みインデックスにのみマッピングの変更を適用するには、put mapping APIのwrite_index_only
クエリパラメータをtrue
に設定します。
次の更新マッピングリクエストは、my-data-stream
の書き込みインデックスに対してのみhost.ip
フィールドのマッピングを変更します。この変更は、ストリームの他のバックインデックスには適用されません。
Python
resp = client.indices.put_mapping(
index="my-data-stream",
write_index_only=True,
properties={
"host": {
"properties": {
"ip": {
"type": "ip",
"ignore_malformed": True
}
}
}
},
)
print(resp)
Ruby
response = client.indices.put_mapping(
index: 'my-data-stream',
write_index_only: true,
body: {
properties: {
host: {
properties: {
ip: {
type: 'ip',
ignore_malformed: true
}
}
}
}
}
)
puts response
Js
const response = await client.indices.putMapping({
index: "my-data-stream",
write_index_only: "true",
properties: {
host: {
properties: {
ip: {
type: "ip",
ignore_malformed: true,
},
},
},
},
});
console.log(response);
Console
PUT /my-data-stream/_mapping?write_index_only=true
{
"properties": {
"host": {
"properties": {
"ip": {
"type": "ip",
"ignore_malformed": true
}
}
}
}
}
サポートされているマッピングパラメータを除いて、既存のフィールドのマッピングやフィールドデータ型を変更することはお勧めしません。データストリームの一致するインデックステンプレートやそのバックインデックス内であっても、既存のフィールドのマッピングを変更すると、すでにインデックスされたデータが無効になる可能性があります。
既存のフィールドのマッピングを変更する必要がある場合は、新しいデータストリームを作成し、その中にデータを再インデックスする必要があります。再インデックスを使用してマッピングや設定を変更するを参照してください。
データストリームの動的インデックス設定を変更する
動的インデックス設定をデータストリームに対して変更するには、次の手順に従います:
- 1. データストリームで使用されるインデックステンプレートを更新します。これにより、設定がストリームのために作成される将来のバックインデックスに適用されます。
たとえば、my-data-stream-template
はmy-data-stream
で使用される既存のインデックステンプレートです。
次のインデックステンプレートの作成または更新リクエストは、テンプレートのindex.refresh_interval
インデックス設定を30s
(30秒)に変更します。
Python
resp = client.indices.put_index_template(
name="my-data-stream-template",
index_patterns=[
"my-data-stream*"
],
data_stream={},
priority=500,
template={
"settings": {
"index.refresh_interval": "30s"
}
},
)
print(resp)
Ruby
response = client.indices.put_index_template(
name: 'my-data-stream-template',
body: {
index_patterns: [
'my-data-stream*'
],
data_stream: {},
priority: 500,
template: {
settings: {
'index.refresh_interval' => '30s'
}
}
}
)
puts response
Js
const response = await client.indices.putIndexTemplate({
name: "my-data-stream-template",
index_patterns: ["my-data-stream*"],
data_stream: {},
priority: 500,
template: {
settings: {
"index.refresh_interval": "30s",
},
},
});
console.log(response);
Console
PUT /_index_template/my-data-stream-template
{
"index_patterns": [ "my-data-stream*" ],
"data_stream": { },
"priority": 500,
"template": {
"settings": {
"index.refresh_interval": "30s"
}
}
}
index.refresh_interval 設定を30s (30秒)に変更します。 |
- 2. update index settings APIを使用して、データストリームのインデックス設定を更新します。デフォルトでは、これによりストリームの既存のバックインデックス、書き込みインデックスを含む設定が適用されます。
次の更新インデックス設定APIリクエストは、index.refresh_interval
設定をmy-data-stream
に更新します。
Python
resp = client.indices.put_settings(
index="my-data-stream",
settings={
"index": {
"refresh_interval": "30s"
}
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-data-stream',
body: {
index: {
refresh_interval: '30s'
}
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-data-stream",
settings: {
index: {
refresh_interval: "30s",
},
},
});
console.log(response);
Console
PUT /my-data-stream/_settings
{
"index": {
"refresh_interval": "30s"
}
}
index.lifecycle.name
設定を変更するには、まずremove policy APIを使用して、既存のILMポリシーを削除します。ライフサイクルポリシーの切り替えを参照してください。
データストリームの静的インデックス設定を変更する
静的インデックス設定は、バックインデックスが作成されるときにのみ設定できます。update index settings APIを使用して静的インデックス設定を更新することはできません。
将来のバックインデックスに新しい静的設定を適用するには、データストリームで使用されるインデックステンプレートを更新します。設定は、更新後に作成されるすべてのバックインデックスに自動的に適用されます。
たとえば、my-data-stream-template
はmy-data-stream
で使用される既存のインデックステンプレートです。
次のインデックステンプレートの作成または更新APIリクエストは、テンプレートに新しいsort.field
およびsort.order index
設定を追加します。
Python
resp = client.indices.put_index_template(
name="my-data-stream-template",
index_patterns=[
"my-data-stream*"
],
data_stream={},
priority=500,
template={
"settings": {
"sort.field": [
"@timestamp"
],
"sort.order": [
"desc"
]
}
},
)
print(resp)
Ruby
response = client.indices.put_index_template(
name: 'my-data-stream-template',
body: {
index_patterns: [
'my-data-stream*'
],
data_stream: {},
priority: 500,
template: {
settings: {
'sort.field' => [
'@timestamp'
],
'sort.order' => [
'desc'
]
}
}
}
)
puts response
Js
const response = await client.indices.putIndexTemplate({
name: "my-data-stream-template",
index_patterns: ["my-data-stream*"],
data_stream: {},
priority: 500,
template: {
settings: {
"sort.field": ["@timestamp"],
"sort.order": ["desc"],
},
},
});
console.log(response);
Console
PUT /_index_template/my-data-stream-template
{
"index_patterns": [ "my-data-stream*" ],
"data_stream": { },
"priority": 500,
"template": {
"settings": {
"sort.field": [ "@timestamp"],
"sort.order": [ "desc"]
}
}
}
sort.field インデックス設定を追加します。 |
|
sort.order インデックス設定を追加します。 |
必要に応じて、データストリームをロールオーバーすることで、設定をデータストリームの書き込みインデックスに即座に適用できます。これにより、ロールオーバー後にストリームに追加される新しいデータに影響します。ただし、データストリームの既存のバックインデックスや既存のデータには影響しません。
既存のバックインデックスに静的設定の変更を適用するには、新しいデータストリームを作成し、その中にデータを再インデックスする必要があります。再インデックスを使用してマッピングや設定を変更するを参照してください。
再インデックスを使用してマッピングや設定を変更する
再インデックスを使用して、データストリームのマッピングや設定を変更できます。これは、既存のフィールドのデータ型を変更したり、バックインデックスの静的インデックス設定を更新したりするためにしばしば必要です。
データストリームを再インデックスするには、まず、希望するマッピングや設定の変更を含むインデックステンプレートを作成または更新します。その後、既存のデータストリームを新しいストリームに再インデックスします。この新しいデータストリームに追加される各ドキュメントとバックインデックスに、テンプレートのマッピングと設定の変更が適用されます。これらの変更は、新しいストリームによって作成される将来のバックインデックスにも影響します。
次の手順に従います:
- 1. 新しいデータストリームの名前またはインデックスパターンを選択します。この新しいデータストリームには、既存のストリームからのデータが含まれます。
resolve index APIを使用して、名前またはパターンが既存のインデックス、エイリアス、またはデータストリームと一致するかどうかを確認できます。一致する場合は、別の名前またはパターンを使用することを検討してください。
次のresolve index APIリクエストは、new-data-stream
で始まる既存のインデックス、エイリアス、またはデータストリームがあるかどうかを確認します。一致しない場合、new-data-stream*
インデックスパターンを使用して新しいデータストリームを作成できます。
Python
resp = client.indices.resolve_index(
name="new-data-stream*",
)
print(resp)
Ruby
response = client.indices.resolve_index(
name: 'new-data-stream*'
)
puts response
Js
const response = await client.indices.resolveIndex({
name: "new-data-stream*",
});
console.log(response);
Console
GET /_resolve/index/new-data-stream*
APIは、次の応答を返し、このパターンに一致する既存のターゲットがないことを示します。
Console-Result
{
"indices": [ ],
"aliases": [ ],
"data_streams": [ ]
}
- 2. インデックステンプレートを作成または更新します。このテンプレートには、新しいデータストリームのバックインデックスに適用したいマッピングと設定が含まれている必要があります。
このインデックステンプレートは、データストリームテンプレートの要件を満たす必要があります。また、index_patterns
プロパティに以前に選択した名前またはインデックスパターンが含まれている必要があります。
いくつかの項目を追加または変更するだけの場合は、既存のテンプレートをコピーして必要に応じて修正することで新しいテンプレートを作成することをお勧めします。
たとえば、my-data-stream-template
はmy-data-stream
で使用される既存のインデックステンプレートです。
次のインデックステンプレートの作成または更新APIリクエストは、新しいインデックステンプレートnew-data-stream-template
を作成します。new-data-stream-template
はmy-data-stream-template
を基にしており、次の変更が加えられています:index_patterns
のインデックスパターンは、new-data-stream
で始まる任意のインデックスまたはデータストリームに一致します。@timestamp
フィールドマッピングは、date_nanos
フィールドデータ型ではなくdate
データ型を使用します。- テンプレートには、元の
my-data-stream-template
テンプレートには含まれていなかったsort.field
およびsort.order
インデックス設定が含まれています。
Python
resp = client.indices.put_index_template(
name="new-data-stream-template",
index_patterns=[
"new-data-stream*"
],
data_stream={},
priority=500,
template={
"mappings": {
"properties": {
"@timestamp": {
"type": "date_nanos"
}
}
},
"settings": {
"sort.field": [
"@timestamp"
],
"sort.order": [
"desc"
]
}
},
)
print(resp)
Ruby
response = client.indices.put_index_template(
name: 'new-data-stream-template',
body: {
index_patterns: [
'new-data-stream*'
],
data_stream: {},
priority: 500,
template: {
mappings: {
properties: {
"@timestamp": {
type: 'date_nanos'
}
}
},
settings: {
'sort.field' => [
'@timestamp'
],
'sort.order' => [
'desc'
]
}
}
}
)
puts response
Js
const response = await client.indices.putIndexTemplate({
name: "new-data-stream-template",
index_patterns: ["new-data-stream*"],
data_stream: {},
priority: 500,
template: {
mappings: {
properties: {
"@timestamp": {
type: "date_nanos",
},
},
},
settings: {
"sort.field": ["@timestamp"],
"sort.order": ["desc"],
},
},
});
console.log(response);
Console
PUT /_index_template/new-data-stream-template
{
"index_patterns": [ "new-data-stream*" ],
"data_stream": { },
"priority": 500,
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date_nanos"
}
}
},
"settings": {
"sort.field": [ "@timestamp"],
"sort.order": [ "desc"]
}
}
}
@timestamp フィールドマッピングをdate_nanos フィールドデータ型に変更します。 |
|
sort.field インデックス設定を追加します。 |
|
sort.order インデックス設定を追加します。 |
- 3. create data stream APIを使用して、新しいデータストリームを手動で作成します。データストリームの名前は、新しいテンプレートの
index_patterns
プロパティで定義されたインデックスパターンと一致する必要があります。
このデータストリームを作成するために新しいデータをインデックスすることはお勧めしません[beb5bf4d08d7f40c.md#create-data-stream]。後で、既存のデータストリームから古いデータをこの新しいストリームに再インデックスします。これにより、新旧のデータが混在する1つ以上のバックインデックスが作成される可能性があります。
データストリーム内の新旧データの混合
新旧データの混合は安全ですが、データ保持に干渉する可能性があります。古いインデックスを削除すると、新旧データが混在するバックインデックスを誤って削除する可能性があります。早期のデータ損失を防ぐために、そのようなバックインデックスを保持する必要があります。新しいデータを削除する準備ができるまで保持してください。
次のcreate data stream APIリクエストは、new-data-stream
をターゲットにし、new-data-stream-template
のインデックスパターンに一致します。この名前を使用する既存のインデックスやデータストリームがないため、このリクエストはnew-data-stream
データストリームを作成します。
Python
resp = client.indices.create_data_stream(
name="new-data-stream",
)
print(resp)
Ruby
response = client.indices.create_data_stream(
name: 'new-data-stream'
)
puts response
Js
const response = await client.indices.createDataStream({
name: "new-data-stream",
});
console.log(response);
Console
PUT /_data_stream/new-data-stream
- 4. 新しいデータストリームで新旧データを混合したくない場合は、新しいドキュメントのインデックスを一時停止します。新旧データの混合は安全ですが、データ保持に干渉する可能性があります。データストリーム内の新旧データの混合を参照してください。
- 5. ILMを使用してロールオーバーを自動化する場合は、ILMポーリング間隔を短縮します。これにより、ロールオーバーチェックを待っている間に現在の書き込みインデックスが大きくなりすぎないようにします。デフォルトでは、ILMは10分ごとにロールオーバー条件を確認します。
次のcluster update settings APIリクエストは、indices.lifecycle.poll_interval
設定を1m
(1分)に下げます。
Python
resp = client.cluster.put_settings(
persistent={
"indices.lifecycle.poll_interval": "1m"
},
)
print(resp)
Ruby
response = client.cluster.put_settings(
body: {
persistent: {
'indices.lifecycle.poll_interval' => '1m'
}
}
)
puts response
Js
const response = await client.cluster.putSettings({
persistent: {
"indices.lifecycle.poll_interval": "1m",
},
});
console.log(response);
Console
PUT /_cluster/settings
{
"persistent": {
"indices.lifecycle.poll_interval": "1m"
}
}
- 6. 新しいデータストリームに
op_type
のcreate
を使用してデータを再インデックスします。
元のインデックスされた順序でデータを分割したい場合は、個別の再インデックスリクエストを実行できます。これらの再インデックスリクエストは、個別のバックインデックスをソースとして使用できます。get data stream APIを使用して、バックインデックスのリストを取得できます。
たとえば、my-data-stream
からnew-data-stream
にデータを再インデックスする予定ですが、my-data-stream
の各バックインデックスに対して個別の再インデックスリクエストを送信したいと考えています。最も古いバックインデックスから始めます。これにより、元のインデックス順序が保持されます。
次のget data stream APIリクエストは、my-data-stream
に関する情報を取得し、そのバックインデックスのリストを含みます。
Python
resp = client.indices.get_data_stream(
name="my-data-stream",
)
print(resp)
Ruby
response = client.indices.get_data_stream(
name: 'my-data-stream'
)
puts response
Js
const response = await client.indices.getDataStream({
name: "my-data-stream",
});
console.log(response);
Console
GET /_data_stream/my-data-stream
応答のindices
プロパティには、ストリームの現在のバックインデックスの配列が含まれています。配列の最初の項目には、ストリームの最も古いバックインデックスに関する情報が含まれています。
Console-Result
{
"data_streams": [
{
"name": "my-data-stream",
"timestamp_field": {
"name": "@timestamp"
},
"indices": [
{
"index_name": ".ds-my-data-stream-2099.03.07-000001",
"index_uuid": "Gpdiyq8sRuK9WuthvAdFbw",
"prefer_ilm": true,
"managed_by": "Unmanaged"
},
{
"index_name": ".ds-my-data-stream-2099.03.08-000002",
"index_uuid": "_eEfRrFHS9OyhqWntkgHAQ",
"prefer_ilm": true,
"managed_by": "Unmanaged"
}
],
"generation": 2,
"status": "GREEN",
"next_generation_managed_by": "Unmanaged",
"prefer_ilm": true,
"template": "my-data-stream-template",
"hidden": false,
"system": false,
"allow_custom_routing": false,
"replicated": false,
"rollover_on_write": false
}
]
}
my-data-stream のindices 配列の最初の項目。この項目には、ストリームの最も古いバックインデックス、.ds-my-data-stream-2099.03.07-000001 に関する情報が含まれています。 |
次のreindex APIリクエストは、.ds-my-data-stream-2099.03.07-000001
からnew-data-stream
にドキュメントをコピーします。このリクエストのop_type
はcreate
です。
Python
resp = client.reindex(
source={
"index": ".ds-my-data-stream-2099.03.07-000001"
},
dest={
"index": "new-data-stream",
"op_type": "create"
},
)
print(resp)
Ruby
response = client.reindex(
body: {
source: {
index: '.ds-my-data-stream-2099.03.07-000001'
},
dest: {
index: 'new-data-stream',
op_type: 'create'
}
}
)
puts response
Js
const response = await client.reindex({
source: {
index: ".ds-my-data-stream-2099.03.07-000001",
},
dest: {
index: "new-data-stream",
op_type: "create",
},
});
console.log(response);
Console
POST /_reindex
{
"source": {
"index": ".ds-my-data-stream-2099.03.07-000001"
},
"dest": {
"index": "new-data-stream",
"op_type": "create"
}
}
クエリを使用して、各リクエストでドキュメントのサブセットのみを再インデックスすることもできます。
次のreindex APIリクエストは、my-data-stream
からnew-data-stream
にドキュメントをコピーします。このリクエストは、range
クエリを使用して、過去1週間以内のタイムスタンプを持つドキュメントのみを再インデックスします。リクエストのop_type
はcreate
です。
Python
resp = client.reindex(
source={
"index": "my-data-stream",
"query": {
"range": {
"@timestamp": {
"gte": "now-7d/d",
"lte": "now/d"
}
}
}
},
dest={
"index": "new-data-stream",
"op_type": "create"
},
)
print(resp)
Ruby
response = client.reindex(
body: {
source: {
index: 'my-data-stream',
query: {
range: {
"@timestamp": {
gte: 'now-7d/d',
lte: 'now/d'
}
}
}
},
dest: {
index: 'new-data-stream',
op_type: 'create'
}
}
)
puts response
Js
const response = await client.reindex({
source: {
index: "my-data-stream",
query: {
range: {
"@timestamp": {
gte: "now-7d/d",
lte: "now/d",
},
},
},
},
dest: {
index: "new-data-stream",
op_type: "create",
},
});
console.log(response);
Console
POST /_reindex
{
"source": {
"index": "my-data-stream",
"query": {
"range": {
"@timestamp": {
"gte": "now-7d/d",
"lte": "now/d"
}
}
}
},
"dest": {
"index": "new-data-stream",
"op_type": "create"
}
}
- 7. 以前にILMポーリング間隔を変更した場合は、再インデックスが完了したら元の値に戻します。これにより、マスターノードへの不必要な負荷を防ぎます。
次のクラスタ更新設定APIリクエストは、indices.lifecycle.poll_interval
設定をデフォルト値にリセットします。
Python
resp = client.cluster.put_settings(
persistent={
"indices.lifecycle.poll_interval": None
},
)
print(resp)
Ruby
response = client.cluster.put_settings(
body: {
persistent: {
'indices.lifecycle.poll_interval' => nil
}
}
)
puts response
Js
const response = await client.cluster.putSettings({
persistent: {
"indices.lifecycle.poll_interval": null,
},
});
console.log(response);
Console
PUT /_cluster/settings
{
"persistent": {
"indices.lifecycle.poll_interval": null
}
}
- 8. 新しいデータストリームを使用してインデックスを再開します。このストリームの検索は、現在のデータと再インデックスされたデータをクエリします。
- 9. すべての再インデックスされたデータが新しいデータストリームで利用可能であることを確認したら、古いストリームを安全に削除できます。
次のdelete data stream APIリクエストは、my-data-stream
を削除します。このリクエストは、ストリームのバックインデックスとそれに含まれるデータも削除します。
Python
resp = client.indices.delete_data_stream(
name="my-data-stream",
)
print(resp)
Ruby
response = client.indices.delete_data_stream(
name: 'my-data-stream'
)
puts response
Js
const response = await client.indices.deleteDataStream({
name: "my-data-stream",
});
console.log(response);
Console
DELETE /_data_stream/my-data-stream
データストリームにエイリアスを更新または追加する
aliases APIを使用して、既存のデータストリームのエイリアスを更新します。既存のデータストリームのエイリアスをインデックスパターンで変更しても効果はありません。
たとえば、logs
エイリアスは単一のデータストリームを指します。次のリクエストは、エイリアスのストリームを入れ替えます。この入れ替え中、logs
エイリアスはダウンタイムなしで、同時に両方のストリームを指すことはありません。
Python
resp = client.indices.update_aliases(
actions=[
{
"remove": {
"index": "logs-nginx.access-prod",
"alias": "logs"
}
},
{
"add": {
"index": "logs-my_app-default",
"alias": "logs"
}
}
],
)
print(resp)
Ruby
response = client.indices.update_aliases(
body: {
actions: [
{
remove: {
index: 'logs-nginx.access-prod',
alias: 'logs'
}
},
{
add: {
index: 'logs-my_app-default',
alias: 'logs'
}
}
]
}
)
puts response
Js
const response = await client.indices.updateAliases({
actions: [
{
remove: {
index: "logs-nginx.access-prod",
alias: "logs",
},
},
{
add: {
index: "logs-my_app-default",
alias: "logs",
},
},
],
});
console.log(response);
Console
POST _aliases
{
"actions": [
{
"remove": {
"index": "logs-nginx.access-prod",
"alias": "logs"
}
},
{
"add": {
"index": "logs-my_app-default",
"alias": "logs"
}
}
]
}