Elasticsearch修改字段之别名,扩展数据迁移

一、修改已经存在的索引

最观的解决方案是首先备份该索引中已经存在的数据,然后删除它再重建该索引。这种方式比较暴力,当索引中已经存在相当多的数据时,不建议这样做。

另外一种方案是使用_open和_close这一对端点,首先将目标索引关闭,执行需要的更新操作,然后再打开该索引。

POST /symbol/_close

PUT /symbol/_settings
{
  "settings": {
    ....    
  }
}

POST /symbol/_open
这样就避免了需要重建索引的麻烦。有了新添加的filter和analyzer,就可以根据需要再对types中的mappings进行更新了。

二、修改字段可以排序

PUT activity_mini/_mapping/activity_dictionary
{
  "properties": {
    "type_code":{
      "type": "text",
      "fielddata": true
    }
  }
}

修改报错 因为字典名称重复使用所以要使用update_all_types 会更新所有字段名相同的属性
Mapper for [type_code] conflicts with existing mapping in other types:\n[mapper [type_code] is used by multiple types. Set update_all_types to true to update [fielddata] across all types.]

PUT activity_mini_v2_0_1/_mapping/activity_dictionary?update_all_types
{
  "properties": {
    "type_code":{
      "type": "text",
      "fielddata": true
    }
  }
}

三、Elasticsearch的别名,就类似数据库的视图。

创建别名:

我们为索引my_index创建一个别名my_index_alias,这样我们对my_index_alias的操作就像对my_index的操作一样
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "my_index",
        "alias": "my_index_alias"
      }
    }
  ]
}
Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了。怎么办??
这里有一个方法修改mapping,那就是重新建立一个index,然后创建一个新的mapping。你可能会问,这要是在生产环境,可行吗?答案是,如果你一开始就采取了合适的设计,这个完全是可以做到平滑过渡的。
采取什么合理设计呢?就是我们的程序访问索引库时,始终使用同义词来访问,而不要使用真正的indexName。在reindex完数据之后,修改之前的同义词即可。明白了吗?
参考上面的思路,我们来一步一步做。
step1、创建一个索引,这个索引的名称最好带上版本号,比如my_index_v1,my_index_v2等。
step2、创建一个指向本索引的同义词。
POST _aliases
{
 "actions": [
   {
     "add": {
       "index": "activity_mini_v2_0_1", 真是索引
       "alias": "activity_mini" 映射
     }
   }
 ]
}
step3,需求来了,需要更改mapping了,此时,你需要创建一个新的索引,比如名称叫my_index_v2(版本升级).,在这个索引里面创建你新的mapping结构。然后,将新的数据刷入新的index里面。在刷数据的过程中,你可能想到直接从老的index中取出数据,然后更改一下格式即可。如何遍历所有的老的index数据。
将老的索引中的数据复制到新的索引中:
POST _reindex
{
  "source": {
    "index": "metricbeat-*"(老的索引名)
  },
  "dest": {
    "index": "metricbeat"(新的索引名)
  }
}
step4,修改同义词。将指向v1的同义词,修改为指向v2。http接口如下:
curl -XPOST localhost:9200/_aliases -d '
{
"actions": [
{ "remove": {
"alias": "my_index",
"index": "my_index_v1"
}},
{ "add": {
"alias": "my_index",
"index": "my_index_v2"
}}
]
}
'
step5,删除老的索引
curl -XDELETE localhost:9200/my_index_v1
导数据
POST _reindex
{
  "source": {
    "index": "activity_mini2"
  },
  "dest": {
    "index": "activity_mini3"
  }
}
创建映射
POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "activity_mini2",
        "alias": "activity_mini2_alias"
      }}, 
      {
      "add": {
        "index": "activity_mini3",
        "alias": "activity_mini2_alias"
      }
    }
  ]
}
删除旧索引
DELETE activity_mini2
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值