es修改字段


es删除字段

2020.12.14 20:53:55字数 432阅读 30

原索引mappings如下,有full_name和short_name两个字段

{ "audit_demo": { "mappings": { "_doc": { "properties": { "full_name": { "type": "text", "analyzer": "ik_max_word" }, "short_name": { "type": "keyword" } } } } } } 

想要删掉short_name字段,修改后mappings如下

{ "audit_demo_bak": { "mappings": { "_doc": { "properties": { "full_name": { "type": "text", "analyzer": "ik_max_word" } } } } } } 

 

步骤1 删除原索引中待删除字段的数据

注意
1.只是删除数据,不是删除字段
2.如果不删除字段数据,后面reindex时依然会把待删除字段的值带到新索引,即使设置新索引的dynamic为false

POST {{di}}/audit_demo/_update_by_query
{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.remove(\"short_name\")"
    },
    "query": {
        "match_all": {}
    }
}

步骤2 新建一个索引,索引结构在原索引上删除short_name字段

PUT {{di}}/audit_demo_bak
{
    "settings": {
        "number_of_shards": "2",
        "number_of_replicas": "2",
        "max_result_window": 100000,
        "analysis": {
            "analyzer": {
                "ik": {
                    "tokenizer": "ik_max_word"
                }
            }
        }
    },
    "mappings": {
        "_doc": {
            "properties": {
                "full_name": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                }
            }
        }
    }
}

步骤3 同步数据

POST {{di}}/_reindex
{
    "source": {
        "index": "audit_demo"
    },
    "dest": {
        "index": "audit_demo_bak"
    }
}

步骤4 删除原索引

DELETE {{di}}/audit_demo

步骤5 新建一个名为原索引名的索引,reindex同步数据,然后删除步骤2新建的索引

 

注意事项

步骤4和步骤5,这两个步骤,耗时较长,在这段时间,索引是不可用的,一般在业务低峰期执行操作没啥问题。如果想要减少索引不可用的时间,有以下两个方案

方案1
删除原索引后,为新索引设置别名为原索引
备注:原索引未删除时,为新索引设置别名为原索引会报错

PUT {{di}}/audit_demo_bak/_alias/audit_demo

方案2
步骤1开始之前,就为原索引设置别名,应用程序通过别名访问索引,步骤4开始之前,删除原索引与别名的关系,新增新索引与别名的关系,应用程序通过别名可以访问到新索引。
虽然这两个步骤的耗时极小,但是还是有可能在这段期间有数据更改,所以还是尽量在业务低峰期操作。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM