Elasticsearch学习(四)

Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。如果已经在线上运行着,我们想修改mapping字段的类型或者结构,那我们该怎么做呢?如果数据量小,可以快速删除索引,并重新构建新的索引,然后再把数据同步到索引中。如果数据量非常庞大,显然这种方式存在问题。如何不停服务重建索引是我们要考虑的问题。当我们的程序访问索引库时,考虑使用别名来访问,而不要使用真正的indexName。我们可以重新再构建一个新的索引,然后在索引更完数据之后,修改之前的别名即可。

创建别名
curl -XPOST localhost:9200/_aliases -d '
{
     "actions": [
        {"add": {"index":"test","alias": "test-aliases"}}
        ]
    }'

索引结构

{
  "test" : {
    "aliases" : {
      "test-aliases" : { }
    },
    "mappings" : {
      "user" : {
        "properties" : {
          "account" : { "type" : "string", "index" : "not_analyzed" },
          "avatar" : { "type" : "string", "index" : "not_analyzed" },
          "createdTimestamp" : { "type" : "date", "format" : "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1473248589616",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "eX_Wr45-Q3KBfoijNV_UXw",
        "version" : {
          "created" : "2020199" }
      }
    },
    "warmers" : { }
  }
}
待更新索引

新建索引test_v1(本次只修改account字段类型)。

{
  "test" : {
    "aliases" : {
      "test-aliases" : { }
    },
    "mappings" : {
      "user" : {
        "properties" : {
          "account" : { "type" : "integer" },
          "avatar" : { "type" : "string", "index" : "not_analyzed" },
          "createdTimestamp" : { "type" : "date", "format" : "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1473248589616",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "eX_Wr45-Q3KBfoijNV_UXw",
        "version" : {
          "created" : "2020199" }
      }
    },
    "warmers" : { }
  }
}

然后把数据同步到test_v1索引。

修改别名
"actions": [
      {"remove": {"index":"test","alias": "test-aliases"}},
      {"add": {"index":"test-v1","alias": "test-aliases"}}
        ]
    }

然后查看别名test-aliases对应的mapping,满足期望效果。

{
  "test_v1" : {
    "aliases" : {
      "test-aliases" : { }
    },
    "mappings" : {
      "user" : {
        "properties" : {
          "account" : { "type" : "integer" },
          "avatar" : { "type" : "string", "index" : "not_analyzed" },
          "createdTimestamp" : { "type" : "date", "format" : "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1473305627645",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "DTlK4py3Tcy-2LNruLWGAw",
        "version" : {
          "created" : "2020199" }
      }
    },
    "warmers" : { }
  }
}

别名test-aliases实际指向的是test-v1。如果数据一切OK了,就可以删除原来的索引test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值