繁体   English   中英

ElasticSearch:如何更新现有索引中的文档类型

[英]ElasticSearch: How to update a document type in an existing index

长话短说:

我创建了一个严格的模板,创建了几个每日索引并更改了模板中的一种文档类型( %_level类型从floatinteger )。

之后,我创建了其余的每日指数。

问题:

我需要将旧索引中的文档类型( %_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类型是整数

  • 示例-20192412
  • 示例-20192512
  • 示例-20192612

但是旧索引包含%_level浮点数的索引,而新索引包含%_level整数

我需要将旧索引%_level浮点数转换为整数,以便我可以构建包含所有索引的报告。

如何将旧索引中的%_levelfloat更改为integer

尽管您可以通过提供文档 ID 从现有索引中添加和删除文档名称,但如果您想更新文档类型并将其应用于所有索引文档,则这样做是有问题的。

这个问题的一个很好的解决方案是重新索引。

重要的:

重新索引过程可以隐式转换某些类型( 数字类型转换)和显式转换其他类型。

如果您需要隐式转换,您可以跳过第 2 节

意思是,对所有旧索引应用以下内容(例如example-20191220 ):

  1. example-20191220创建一个名为example-20191220-new的新索引
  2. 在创建过程中添加一个轻松的脚本,将%_level类型从浮点数转换为整数
  3. 删除旧索引示例-20191220
  4. 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"
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM