[英]How to update an existing document inside an ElasticSearch index using NEST?
[英]ElasticSearch: How to update a document type in an existing index
长话短说:
我创建了一个严格的模板,创建了几个每日索引并更改了模板中的一种文档类型( %_level类型从float到integer )。
之后,我创建了其余的每日指数。
问题:
我需要将旧索引中的文档类型( %_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"
}
}
}
}
}
使用此模板创建了多个索引。
一段时间后,我意识到我们需要将%_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类型是整数。
但是旧索引包含%_level为浮点数的索引,而新索引包含%_level为整数。
我需要将旧索引%_level从浮点数转换为整数,以便我可以构建包含所有索引的报告。
如何将旧索引中的%_level从float更改为integer ?
尽管您可以通过提供文档 ID 从现有索引中添加和删除文档名称,但如果您想更新文档类型并将其应用于所有索引文档,则这样做是有问题的。
这个问题的一个很好的解决方案是重新索引。
重要的:
重新索引过程可以隐式转换某些类型( 数字类型转换)和显式转换其他类型。
如果您需要隐式转换,您可以跳过第 2 节
意思是,对所有旧索引应用以下内容(例如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"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.