0%

elasticsearch索引

elasticsearch索引

新建索引

1
PUT blog

返回结果acknowledged的值为true表示新建索引成功

映射

映射是用于进行字段类型确认的,将每个字段匹配为一种确定的数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// 查看文档结果
GET video/_mapping/default


{
"video": {
"mappings": {
"default": {
"properties": {
"age": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"doc_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"doc_title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"duration": {
"type": "long"
},
"keywords": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"number": {
"type": "long"
}
}
}
}
}
}

在向索引中添加数据的时候,如果不存在该索引,会根据所添加的数据来进行创建索引,所生成的mapping也是根据添加的数据来进行自动判断的,当然一般这种自动生成的可能并不适用,我们也经常手动创建索引并指定映射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
PUT testmapping
{
"mappings": { // 映射结构需要包含在mappings中
"default": { // 类型名
"properties": { // 指定字段们的类型
"age": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"doc_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"doc_title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"duration": {
"type": "long"
},
"keywords": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"number": {
"type": "long"
}
}
}
}
}

对于是否自动创建索引可以在配置文件中进行配置

action.auto_create_index: false

对于已经创建好的索引,有时候也会新增字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUT testmapping/_mapping/default
{
"properties": {
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}

设置

索引除了映射之外还有设置

1
2
3
4
5
6
PUT index1
{
"settings": {
"number_of_shards": 1
}
}

有些设置只能在创建索引的时候设置,而有些可以进行动态的修改

elasticsearch默认一个索引设置5个分片1个副本,一个索引的分片数指定后就不可修改,副本数可以通过命令来随时修改

1
2
3
4
5
6
PUT index1/_settings
{
"settings": {
"number_of_replicas": 1
}
}

对于不允许动态修改的设置调用会报错

查看索引设置

1
GET blog/_settings

还支持查询多个索引的设置

1
GET index1,index2/_settings

也可以查看所有索引的设置

1
GET _all/_settings

设置为默认值

如果想要恢复为默认值,则设置为null

1
2
3
4
5
6
PUT index2/_settings
{
"index":{
"refresh_interval":null
}
}

读写权限

索引还可以进行读写操作的限制,如下三个参数

  • index.blocks.read_only:true 设置当前索引只允许读不允许写或更新
  • index.blocks.read_only_allow_delete:true 只读时允许删除
  • index.blocks.read:true 禁止对当前索引进行读操作
  • index.blocks.write:true 禁止对当前索引进行写操作
  • index.blocks.metadata:true 禁止对当前索引的元数据进行读写

打开/关闭索引

1
2
3
4
5
# 关闭索引,关闭的索引不能进行读写操作
POST testmapping/_close

# 打开索引
POST testmapping/_open

可以设置cluster.indices.close.enable为false来禁止使用关闭功能

设置别名

可以为索引设置别名,通过别名可以查询到一个或多个索引的内容,elasticsearch会自动把别名映射到相应的索引上,别名不能重复,也不能与索引名重复

添加别名

1
2
3
4
5
6
7
8
9
10
11
POST _aliases
{
"actions": [
{
"add": {
"index": "testmapping",
"alias": "tm"
}
}
]
}

删除别名

1
2
3
4
5
6
7
8
9
10
11
POST _aliases
{
"actions": [
{
"remove": {
"index": "testmapping",
"alias": "tm"
}
}
]
}

复制/重建索引

支持把文档从一个索引复制到另一个索引(原有索引保留),但是并不会复制索引中的配置信息,_reindex之前需要设置目标索引的分片数、副本数等信息

原有索引_source必须开启,否则找不到原始数据

1
2
3
4
5
POST _reindex
{
"source": {"index":"index1"},
"dest": {"index":"index2"},
}

复制过程还支持条件复制

1
2
3
4
5
6
7
8
9
10
11
POST _reindex
{
"source": {
"index":"index1",
"type":"default",
"query":{
"term": {"age":20}
}
},
"dest": {"index":"index2"},
}

这里有几个重要的url参数

  • requests_per_second 每秒的数据量,建议控制在500-1000,要控制重建速度,防止集群瞬间IO过大

重建索引是一个异步任务,由ES后台进程完成调度执行,集群可能有并行其他异步任务,有时需要中断或查看进度

可以使用任务接口来查看

1
2
GET _cat/tasks
GET _tasks?actions=*reindex

也可以终止任务

1
POST _tasks/{taskid}/_cancel

欢迎关注我的其它发布渠道