乐趣区

关于elasticsearch:elasticsearch修改索引

什么状况下须要更改 ES 索引?

在应用 ES 做我的项目开发的时候,很多时候回随着版本的迭代呈现 ES 索引数据的变动,如果是在刚开始开发的时候,那就是删除原来的旧数据从新建索引就能够了,然而我的项目上线并经营了一段时间后,很显然这种形式就不可取了。

这时候咱们就要用到 ES 提供的_reindex 办法了

假如 ES 曾经创立了名叫 live 的索引,并且在 ES 外面 live 曾经存入了很多数据。
mapping 构造体为:

{
  "mappings": {
    "properties": {
      "room_id": {"type": "keyword"},
      "room_name": {"type": "text"},
      "shop_ids": {"type": "keyword"},
      "live_date": {"type": "keyword"},
      "goods_list": {
        "type": "nested",
        "properties": {
          "goods_id": {"type": "keyword"},
          "goods_name": {"type": "text"},
          "sku_code": {"type": "keyword"},
          "category_id": {"type": "keyword"},
          "activity_type": {"type": "keyword"},
          "lecture_type": {"type": "keyword"},
          "area_ids": {"type": "keyword"}
        }
      },
      "creator_id": {"type": "keyword"},
      "push_type": {"type": "keyword"},
      "create_at": {"type": "keyword"}
    }
  }
}

索引重建以及数据迁徙

假如一个场景,须要更改 live 对应的 mapping 构造体,去掉 ”push_type” 字典,另外新增 ”push_status” 字典,然而不影响原来数据。

1. 创立一个新的索引,索引名称为 datacube_live,索引对应 mapping 构造体如下所示,通过调用 ES 接口,创立新索引。

PUT http://localhost:9200/datacub…

{
  "mappings": {
    "properties": {
      "room_id": {"type": "keyword"},
      "room_name": {"type": "text"},
      "shop_ids": {"type": "keyword"},
      "live_date": {"type": "keyword"},
      "goods_list": {
        "type": "nested",
        "properties": {
          "goods_id": {"type": "keyword"},
          "goods_name": {"type": "text"},
          "sku_code": {"type": "keyword"},
          "category_id": {"type": "keyword"},
          "activity_type": {"type": "keyword"},
          "lecture_type": {"type": "keyword"},
          "area_ids": {"type": "keyword"}
        }
      },
      "creator_id": {"type": "keyword"},
      "push_status": {"type": "keyword"},
      "create_at": {"type": "keyword"}
    }
  }
}

2. 将 ES 外面 live 对应的数据,复制到 datacube_live 索引外面。

POST http://localhost:9200/_reindex

{
  "source": {"index": "live"},
  "dest": {"index": "datacube_live"}
}

3. 测验迁徙是否胜利

GET http://xxxx:9200/datacube_liv…

申请参数为:
{}

datacube_live 曾经蕴含了数据,阐明数据迁徙胜利。能够先删除 live 索引及数据,再将 datacube_live 通过重命名,再更改为 live,这就实现了整个数据迁徙。

退出移动版