当我们在使用ES(Elasticsearch)作为全文检索服务器时, 文档结构避免不了会发生变化, 比如增加字段, 而且增加的字段需要进行分词时, 再比如原来文档结构中的字段类型发生变化了, 假设原来的字段类型是String, 而修改后的字段类型是Object, ES是不支持这种直接修改字段类型的。我们能做的只有进行索引重建, 当然关系型数据库也不支持这种类型字段改变的情况。
这里我们假定一些条件:
- 端口为19200/19300
- 带有HTTP Basic Auth认证
- 原始的索引名称为goods
为原来的索引设置别名(如果不存在)
1 | curl -u user:passwd -XPOST 'http://127.0.0.1:19200/_aliases?pretty' -d ' |
创建新的索引goods_v1
1 | curl -u user:passwd -XPOST 'http://127.0.0.1:19200/goods_v1?pretty' -d ' |
用Golang脚本将旧的索引数据导入到新的索引中
1 | package main |
删除原来的索引别名, 并为新的索引设置跟之前索引一样的别名
1 | curl -u user:passwd -XPOST 'http://127.0.0.1:19200/_aliases?pretty' -d ' |
索引别名更正
1 | curl -u user:passwd -XPOST 'http://127.0.0.1:19200/_aliases?pretty' -d ' |
删除原来的索引
1 | curl -u user:passwd -XDELETE 'http://127.0.0.1:19200/goods?pretty' |