ElasticSearch:如何更新现有索引中的文档类型
ElasticSearch: How to update a document type in an existing index
长话短说:
我创建了一个严格的模板,创建了几个每日索引并将其中一种文档类型(%_level 类型从 float 更改为整数) 在模板中。
之后,我创建了其余的每日指数。
问题:
我需要更改文档类型(%_level 类型从 float 到 integer ) 在旧索引中与新索引兼容。
我怎样才能做到这一点?
现在了解详情...
我有以下严格模板:
PUT _template/example-template
{
"order":0,
"version":200,
"index_patterns":["example-*"],
"settings":{
"index":{
"number_of_shards":4
}
},
"mappings": {
"iterations": {
"dynamic":"strict",
"properties": {
"%_average1": {
"type":"float"
},
"%_average2": {
"type":"float"
},
"sum": {
"type":"integer"
},
"%_level": {
"type":"float"
}
}
}
}
}
使用此模板创建了多个索引。
- 示例 20191220
- 示例 20191221
- 示例 20191222
- 示例 20191223
一段时间后我意识到我们需要将 %_level 类型从 float 更改为 integer,所以我把模板改成了下面这样:
PUT _template/example-template
{
"order":0,
"version":200,
"index_patterns":["example-*"],
"settings":{
"index":{
"number_of_shards":4
}
},
"mappings": {
"iterations": {
"dynamic":"strict",
"properties": {
"%_average1": {
"type":"float"
},
"%_average2": {
"type":"float"
},
"sum": {
"type":"integer"
},
"%_level": {
"type":"integer"
}
}
}
}
}
现在创建了以下索引,其中 %_level 类型是 integer。
- 示例 20192412
- 示例 20192512
- 示例 20192612
但旧索引包含 %_level 的索引,即 float,而新索引包含 %_level 是一个 整数 .
我需要将旧索引 %_level 从 float 转换为 integer 所以我可以构建包含所有索引的报告。
如何将旧索引中的 %_level 从 float 更改为 integer ?
虽然您可以通过提供文档 ID 在现有索引中添加和删除文档名称,但是如果您想更新文档类型并将其应用于所有索引文档,那么这样做是有问题的。
这个问题的一个很好的解决方案是重建索引。
Important:
The reindex process can convert some types implicitly (Numeric Type Casting) and the others explicitly.
In case you need implicit conversion, you can skip section 2
意思是,对所有旧索引应用以下内容(例如 example-20191220):
- 从 example-20191220 创建一个名为 example-20191220-new
的新索引
- 在创建过程中添加一个无痛脚本,将 %_level 类型从 float 转换为 integer
- 删除旧索引example-20191220
- 重新索引 example-20191220-new 到 example-20191220
现在,'updated' 索引 example-20191220 具有正确的 %_level 类型。
第 2 部分 中的重建索引应如下所示:
(在 Kibana Dev Tools 上执行和测试)
POST _reindex
{
"source": {
"index": "example-20191220"
},
"dest": {
"index": "example-20191220-new"
},
"script": {
"lang": "painless",
"source":
"""
Double num = ctx._source['%_level'];
if(num != null)
{ ctx._source['%_level'] = num.intValue(); }
"""
}
}
第 4 节 中的重建索引应如下所示:
(在 Kibana Dev Tools 上执行和测试)
POST _reindex
{
"source": {
"index": "example-20191220-new"
},
"dest": {
"index": "example-20191220"
}
}
长话短说:
我创建了一个严格的模板,创建了几个每日索引并将其中一种文档类型(%_level 类型从 float 更改为整数) 在模板中。
之后,我创建了其余的每日指数。
问题:
我需要更改文档类型(%_level 类型从 float 到 integer ) 在旧索引中与新索引兼容。 我怎样才能做到这一点?
现在了解详情...
我有以下严格模板:
PUT _template/example-template
{
"order":0,
"version":200,
"index_patterns":["example-*"],
"settings":{
"index":{
"number_of_shards":4
}
},
"mappings": {
"iterations": {
"dynamic":"strict",
"properties": {
"%_average1": {
"type":"float"
},
"%_average2": {
"type":"float"
},
"sum": {
"type":"integer"
},
"%_level": {
"type":"float"
}
}
}
}
}
使用此模板创建了多个索引。
- 示例 20191220
- 示例 20191221
- 示例 20191222
- 示例 20191223
一段时间后我意识到我们需要将 %_level 类型从 float 更改为 integer,所以我把模板改成了下面这样:
PUT _template/example-template
{
"order":0,
"version":200,
"index_patterns":["example-*"],
"settings":{
"index":{
"number_of_shards":4
}
},
"mappings": {
"iterations": {
"dynamic":"strict",
"properties": {
"%_average1": {
"type":"float"
},
"%_average2": {
"type":"float"
},
"sum": {
"type":"integer"
},
"%_level": {
"type":"integer"
}
}
}
}
}
现在创建了以下索引,其中 %_level 类型是 integer。
- 示例 20192412
- 示例 20192512
- 示例 20192612
但旧索引包含 %_level 的索引,即 float,而新索引包含 %_level 是一个 整数 .
我需要将旧索引 %_level 从 float 转换为 integer 所以我可以构建包含所有索引的报告。
如何将旧索引中的 %_level 从 float 更改为 integer ?
虽然您可以通过提供文档 ID 在现有索引中添加和删除文档名称,但是如果您想更新文档类型并将其应用于所有索引文档,那么这样做是有问题的。
这个问题的一个很好的解决方案是重建索引。
Important:
The reindex process can convert some types implicitly (Numeric Type Casting) and the others explicitly.
In case you need implicit conversion, you can skip section 2
意思是,对所有旧索引应用以下内容(例如 example-20191220):
- 从 example-20191220 创建一个名为 example-20191220-new 的新索引
- 在创建过程中添加一个无痛脚本,将 %_level 类型从 float 转换为 integer
- 删除旧索引example-20191220
- 重新索引 example-20191220-new 到 example-20191220
现在,'updated' 索引 example-20191220 具有正确的 %_level 类型。
第 2 部分 中的重建索引应如下所示:
(在 Kibana Dev Tools 上执行和测试)
POST _reindex
{
"source": {
"index": "example-20191220"
},
"dest": {
"index": "example-20191220-new"
},
"script": {
"lang": "painless",
"source":
"""
Double num = ctx._source['%_level'];
if(num != null)
{ ctx._source['%_level'] = num.intValue(); }
"""
}
}
第 4 节 中的重建索引应如下所示:
(在 Kibana Dev Tools 上执行和测试)
POST _reindex
{
"source": {
"index": "example-20191220-new"
},
"dest": {
"index": "example-20191220"
}
}