1、前言
我们都知道elasticSearch在创建好mapping后不能修改mapping的字段type,因为elasticSearch的底层是lucene,他是会先构建好分词,以及倒排索引等一些操作。所以,是不能修改mapping的。又是我们在工作中:比如,date类型弄成了text类型,或者相反。还有inter类型,需要变为float类型。等情况。我们总不可能将索引删除,重新创建一个index,这样会丢失数据。解决办法就是重建索引。
2、重建索引
所谓重建并不是删除重建创建mapping,而是使用别名映射的形式。
POST _reindex
{
"source": {
"index": "index1"
},
"dest": {
"index": "index2"
}
}
3、步骤
3.1、复制源索引mapping
原始索引:
PUT index1
{
"mappings": {
"_doc": {
"properties": {
"create_date": {
"type": "date",
"format": "yyyy-MM-dd ||yyyy/MM/dd"
}
}
}
}
}
通过_mapping查看所有的属性。
GET index/_mapping
3.2、创建一个新索引
PUT index2
{
"mappings": {
"_doc": {
"properties": {
"create_date": {
"type": "text"
}
}
}
}
}
3.3、重建索引数据:
POST _reindex
{
"source": {
"index": "index1"
},
"dest": {
"index": "index2"
}
}
3.4、删除原索引:
也可以不删除,防止出意外。确保无误后才删除。
DELETE index1
3.5、设置别名:
POST /_aliases
{
"actions": [
{"add": {"index": "index2", "alias": "index1"}}
]
}
4、重建优化
很多时候我们重建的索引数据量很大的时候,数据同步很慢。其实主要是集群的写入速度慢。以及reindex的批次太小。
1、可以设置bitch的大小,每批的大小最好设置在10-20MB根据你索引数据的大小设置。
2、将你要创建的索引副本设置为0。
3、增加数据刷新时间间隔,最好是关闭。