如何修改Elasticsearch索引字段类型?

前言

由于团队中的小伙伴,将ElasticSearch的keyword类型字段创建为Text类型,导致其他小伙伴通过match或term查询怎么查也查不到,所以需要去修改Elasticsearch索引字段类类型;但是ElasticSearch没有像关系型数据库一样可以直接修改字段数据类型的方法;

一、修改思路如下

1、获取源索引的数据(mapping) 并 创建临时索引:data_index_temp,
2、备份数据到临时索引:data_index_temp
3、删除原索引: data_index,
4、重新创建正确数据类型索引:data_index
5、再把临时索引:data_index_temp的数据备份到新创建索引 data_index。
以上语句通过kibana的 dev_tools/console 执行。

见图在这里插入图片描述

二、操作步骤

  1. 获取源索引的数据(mapping)
  2. 创建一个临时索引,并复制源索引的mapping数据
  3. 复制源索引的数据值临时索引,并查询确认数据是否复制过去
  4. 删除有问题的索引
  5. 重新创建同名的索引(注意:字段类型修改正确)
  6. 从临时索引还原到源索引的数据
  7. 删除临时索引

以下简单做个示例

1.获取源索引的数据(mapping)

代码如下(示例):

//获取源索引的mapping数据
GET data_index/_mapping

//返回示例如下
  {"data_index": {
    "mappings": {
      "cdp_doc": {
        "properties": {
	        "whyBuy": {
	          "type": "keyword"
	        },
	        "zipcode": {
	          "type": "keyword"
	        }
        }
      }
    }
  }

2. 创建一个临时索引,并使用源索引的mapping数据

代码如下(示例):

//# 创建Mapping
PUT data_index_temp
{
  "mappings": {
    "cdp_doc": {
      "properties": {
        "whyBuy": {
          "type": "keyword"
        },
        "zipcode": {
          "type": "keyword"
        }
      }
    }
  }
}

3. 复制源索引的数据至临时索引,并查询确认数据是否复制过去

代码如下(示例):

//# 创建Mapping
PUT data_index_temp
{
  "mappings": {
    "cdp_doc": {
      "properties": {
        "whyBuy": {
          "type": "keyword"
        },
        "zipcode": {
          "type": "keyword"
        }
      }
    }
  }
}
// 同步数据值临时索引
POST _reindex?refresh&wait_for_completion=false
{
  "conflicts": "proceed",
  "source": {
    "index": "data_index"
  },
  "dest": {
    "index": "data_index_temp",
    "op_type": "create"
  }
}

//查询确认数据是否复制过去
GET  data_index_temp/_search
{
  "query": {
    "term": {
    }
  }
}

4. 删除有问题的索引

//删除索引及数据
delete cdp_elelc_customer

5. 重新创建同名的索引(注意:字段类型修改正确)

步骤同第2步

6. 从临时索引还原至源索引的数据

步骤同第3步

7. 删除临时索引

步骤同第4步


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值