发现以前老的索引需要改动,加字段啊,改类型什么的就必须修改索引的mapping. 但是elasticesearch的mapping一旦创建是不能修改.
要么你重新建一个索引,设置新的mapping然后再导入数据或者我们reindex的方式来修改mapping并完成数据的迁移;
1,创建新的索引,设置好mapping
POST admin_regin2/_doc
{
"mapping": {
"_doc":{
"properties": {
"areaCode": {
"type": "long"
},
"createUsername": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256,
"index":false,
"store":false
}
}
},
"id": {
"type": "long"
},
"level": {
"type": "boolean"
},
"mergerName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
2,为新的索引设置好别名(查询时候可以通过指定此别名查询,和指定原索引名效果一样),设置别名的目的就是为了使用原来索引的语句不用改; 我将新的索引别名设置成原来旧的索引名,
然后旧的查询直接无缝切换到新建的索引
// 为admin_regin2 创建别名admin_regin
PUT admin_regin2/_aliases
{
"actions":[
{"add":
{"index":"admin_regin2", "alias": "admin_regin"}
}
]
}
3,reindex,将旧索引数据迁移到新的索引, 但如果新的index中有数据,并且可能发生冲突,那么可以设置version_type"version_type": "internal"
或者不设置,则Elasticsearch强制性的将文档转储到目标中,覆盖具有相同类型和ID的任何内容:
POST _reindex
{
"source": {
"index": "admin_regin"
},
"dest": {
"index": "admin_regin2",
"version_type": "internal"
}
}
后面我就可以删除掉原来的索引,使用admin_regin 或者admin_regin2都能访问新的索引库了