elasticsearch5.5.2不停服务重建myindex

业务场景说明

已存在索引myindex(类型为mytype),由于业务需要修改字段类型,或需要指定中文分词器ik_max_word;但由于es已存在字段不允许修改索引mapping结构,只能重建索引;灵活使用reindex和aliases,达到不停服务重建索引目的。

本次重建mapping操作步骤

郑重声明:养成好习惯,操作之前先备份好myindex数据

$ curl -X POST 'http://localhost:9200/_reindex?slices=5&refresh&wait_for_completion=false' -d '
{
  "conflicts": "proceed",
  "source":{
    "index":"myindex",
	"query": {
		"match_all": {}
	},
	"size": 1000
  },
  "dest":{
    "index":"myindex_bak"
  }
}
'
# slices=5 : 拆分为5个任务,视机器的CPU等资源而定,也可以不用这个参数
# wait_for_completion=false : 异步任务处理,不用等待结果返回,可以通过命令_tasks查看任务执行情况

查询当前所有reindex任务,进行找到当前任务id

$ curl -X GET 'http://localhost:9200?_tasks?detailed=true&actions=*reindex'

查看当前任务

$ curl -X GET 'http://localhost:9200/_tasks/taskId:9620804'

1、按最新结构创建好myindex_v1

说明:如果设置默认模板(_template/rtf)为中文分词器,不需要特意创建结构指定中文分词器,直接reindex即可

$ curl -X PUT 'http://localhost:9200/myindex_v1' -d '
#...此处省略mapping结构,如下面结构
{
  “mappings”:{
    "mytype":{
      "properties":{
        "name":{
          "type":"keyword"
        }
      }
    }
  }
}
'
# 可以通过_mapping查看myindex的mappings结构,根据结构修改即可
$ curl -X GET 'http://localhost:9200/myindex/_mapping'

2、从myindex重建索引到myindex_v1

注意:当前步骤操作完后,查看node状态及数据条数、任务响应中是否有失败消息,保证数据正确才进行下一步操作

$ curl -X POST 'http://localhost:9200/_reindex?slices=5&refresh&wait_for_completion=false' -d '
{
  "conflicts": "proceed",
  "source":{
    "index":"myindex",
	"query": {
		"match_all": {}
	},
	"size": 1000
  },
  "dest":{
    "index":"myindex_v1"
  }
}
'

3、删除myindex

$ curl -X DELETE 'http://localhost:9200/myindex'

4、创建myindex_v1的同义词为myindex

$ curl -X POST 'http://localhost:9200/_aliases' -d '
{
    "actions": [
        { "add": {
            "alias": "myindex",
            "index": "myindex_v1"
        }}
    ]
}
'

5、验证访问myindex数据

$ curl -X GET 'http://localhost:9200/myindex/mytype/_search'

下次重建myindex的mapping操作步骤

操作之前记得备份myindex数据呀。。。

1、按最新结构创建好myindex_v2

说明:如果设置默认模板(_template/rtf)为中文分词器,不需要特意创建结构指定中文分词器,直接reindex即可

$ curl -X PUT 'http://localhost:9200/myindex_v2' -d '
#...此处省略mapping结构,如下面结构
{
  “mappings”:{
    "mytype":{
      "properties":{
        "name":{
          "type":"keyword"
        }
      }
    }
  }
}
'
# 可以通过_mapping查看myindex的mappings结构,根据结构修改即可
$ curl -X GET 'http://localhost:9200/myindex/_mapping'

2、从myindex_v1重建索引到myindex_v2

注意:当前步骤操作完后,查看node状态及数据条数、任务响应中是否有失败消息,保证数据正确才进行下一步操作

$ curl -X POST 'http://localhost:9200/_reindex?slices=5&refresh&wait_for_completion=false' -d '
{
  "conflicts": "proceed",
  "source":{
    "index":"myindex_v1",
	"query": {
		"match_all": {}
	},
	"size": 1000
  },
  "dest":{
    "index":"myindex_v2"
  }
}

3、修改同义词。将myindex指向myindex_v1的同义词,修改为myindex指向myindex_v2

curl -X POST localhost:9200/_aliases -d '
{
    "actions": [
        { "remove": {
            "alias": "myindex",
            "index": "myindex_v1"
        }},
        { "add": {
            "alias": "myindex",
            "index": "myindex_v2"
        }}
    ]
}
'

4、删除myindex_v1

$ curl -X DELETE 'http://localhost:9200/myindex_v1'

5、验证访问myindex数据

$ curl -X GET 'http://localhost:9200/myindex/mytype/_search'

其他:设置es默认模板,指定索引text字段都为ik_max_word分词器

注: 设置模板,需要重新导入数据,才生效 即:新增的index或reindex才会使用默认模板

1.获取全局默认分词器

curl -X GET 'http://localhost:9200/_template/rtf'

2.删除默认模板

curl -X DELETE 'http://localhost:9200/_template/rtf'

3.设置全局默认分词器

curl -X PUT 'http://localhost:9200/_template/rtf'
-d'
{
  "template":   "*", 
  "settings": { "number_of_shards": 1 }, 
  "mappings": {
    "_default_": {
      "_all": { 
        "enabled": true
      },
      "dynamic_templates": [
        {
          "strings": { 
            "match_mapping_type": "string",
            "mapping": {
              "type": "text",
              "analyzer":"ik_max_word",
			  "search_analyzer":"ik_max_word",
              "ignore_above": 102400,
              "fields": {
                "keyword": {
                  "ignore_above": 256,
                  "type":  "keyword"
                }
              }
            }
          }
        }
      ]
    }
  }
}
'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mylk0606

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值