ElasticSearch修改分片数和副本数及增加字段
2022-04-24 本文已影响0人
与狼共舞666
一、修改副本数
PUT test/_settings
{
"index": {
"number_of_replicas" : 1
}
}
二、修改分片数
ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。如果执行下面语句会报错
PUT test/_settings
{
"index": {
"number_of_shards" : 1
}
}
随着数据量的增大,每个分片中的数据量也会不断增加,为了不使每个分片中的数据量过大,就需要增加分片的数量,但是分片数在索引库创建之初就已经确定,并且不能改变。
为了解决这个问题,ElasticSearch中设置了重新索引机制来实现。本文将通过一个案例进行演示如何通过重新索引修改分片数。
什么是重新索引
简单来说,重新索引就是创建一个和原索引库结构属性都基本一样的新的索引库,然后将原索引库中的数据复制到新的索引库当中。在新的索引库中,除了需要变更的地方,比如某些字段的数据类型和分片数,其他的所有属性都一样。
重新索引的具体实现
- 创建学生索引库
下列是创建索引库students1的命令,这里创建一个关于学生信息的索引库,指定分片数为3。
DELETE students1
PUT students1
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"student":{
"dynamic":"strict",
"properties":{
"id":{"type": "text", "store": true},
"name":{"type": "text","store": true},
"age":{"type": "integer","store": true},
"times": {"type": "text", "index": false}
}
}
}
}
- 插入数据
创建好索引库students1后,插入一条数据,为后面的验证做数据准备。
PUT students1/student/1
{ "id" : "1",
"name" : "张三",
"age" : 20 ,
"times" : "2020-02-01"
}
- 新建索引库students2
下列是创建索引库students2的命令,与students1不同的地方是指定分片数为5,其他的属性都和students1一样。
DELETE students2
PUT students2
{ "settings":
{ "number_of_shards":5,
"number_of_replicas":1
},
"mappings":
{ "student":{ "dynamic":"strict", "properties":{ "id":{"type": "text", "store": true}, "name":{"type": "text","store": true}, "age":{"type": "integer","store": true}, "times": {"type": "text", "index": false} } }
}
}
- 拷贝数据
通过下面命令,将students1中的数据复制到students2中,这是重新索引的核心步骤。
POST _reindex
{
"source": {
"index": "students1"
},
"dest": {
"index": "students2"
}
}
小结
本文通过一个简单的案例,先创建索引库students1和索引库students2,在创建students2的语句中指定新的分片数,然后将students1中数据复制到students2中,实现重新索引,以达到修改索引库分片数的目的。如果生产中需要实现重新索引,需要按照实际索引库的情况修改创建索引库的命令,在实现重新索引之后,要将程序中的索引库指向新的索引库。另外,本文中的操作命令是通过在kibana中的命令窗口中执行的,本文重点在介绍如何通过重新索引修改分片数及增加字段
三、增加字段
PUT ods_big_epid/_mapping/ods_big_epid
{
"properties":{
"reportDate":{
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}