ElasticSearch-基础-09-index-operate
2025-01-22 08:19:30    1.5k 字   
This post is also available in English and alternative languages.

ElasticSearch版本:6.5.0(点击跳转官方文档)


1. 索引名格式限制

  • 仅小写

  • 不能包含\ , / , * , ? , “ , < , > , | , ‘’(空格字符) , 、 , #

  • 7.0版本之前可以含有’:'冒号;7.0版本之后不再支持

  • 不允许 以 - , _ , + 开头

  • 索引名称长度不能超过 255字节


2. 手动创建索引

创建一个空索引

1
2
3
PUT twitter

curl -XPUT 'http://127.0.0.1:9200/twitter'

返回结果

1
2
3
4
5
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "facebook"
}
  • acknowledged:集群是否成功创建索引

  • shards_acknowledged:索引中每个分片是否成功启动所需数量的分片副本


3. 手动创建索引并设置索引分片

手动创建索引,并 设置索引的 分片数量 和 副本分片数量

1
2
3
4
5
6
7
8
9
PUT twitter
{
"settings": {
"index": {
"number_of_shards": 5,
"number_of_replicas": 0
}
}
}

OR

1
2
3
4
5
6
7
PUT twitter
{
"settings" : {
"number_of_shards" : 5,
"number_of_replicas" : 0
}
}
  • number_of_shards:每个索引的主分片数,默认值是5,索引创建后不能修改

  • number_of_replicas:每个主分片的副本数,默认值是1,这个配置可以随时修改

如果要实时修改 number_of_replicas ,使用如下命令

1
2
3
4
PUT /twitter/_settings
{
"number_of_replicas": 1
}

4. 手动创建索引并设置映射

创建名称’twitter’的索引;设置5个主分片,0个副本分片;mapping设置三个字段,并分别设置字段类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PUT twitter
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 0
},
"mappings": {
"_doc": {
"properties": {
"user": {
"type": "text"
},
"post_date": {
"type": "keyword"
},
"message": {
"type": "text"
}
}
}
}
}

5. 手动创建索引 并 设置映射(2)

先创建一个索引,然后再追加mappings设置

1
2
3
4
5
6
7
8
9
PUT twitter
{
"settings": {
"index": {
"number_of_shards": 5,
"number_of_replicas": 0
}
}
}

追加mappings设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
put twitter/_mapping/_doc
{
"properties": {
"user": {
"type": "text"
},
"post_date": {
"type": "keyword"
},
"message": {
"type": "text"
}
}
}

6. 查询索引Mappings映射

查询twitter索引的映射

1
2
3
GET /twitter/_mapping/_doc

GET /_mapping/_doc

查询 所有索引的 Mappings映射

1
2
3
GET /_all/_mapping

GET /_mapping

7. 快速创建索引(自动创建索引)

使用 ‘PUT’ 方法,将数据插入到索引中。 如果索引还不存在,会自动创建一个索引(通过 action.auto_create_index 配置,默认为true)

如下示例,创建名为’twitter’的索引:

1
2
3
4
5
6
PUT twitter/_doc/1
{
"user" : "kimchy",
"post_date" : "2019-10-30",
"message" : "trying out Elasticsearch"
}

返回结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
  • _shards 节点:索引操作相关信息

  • total:索引操作执行多少个分片副本,包含主副本分片。针对这条数据,一条数据只会写在一个分片上;也就是会写在它的一个主分片、一个副本分片,一共两个。

    注意:total 要看 number_of_replicas、number_of_shards 的设置。
    举个栗子: twitter索引有5个主分片,每个主分片0个副本分片。再执行上面的put操作,返回的 total 就是1

  • successful:索引成功操作分片的数量

注意,自动创建索引,使用的是动态映射,生产环境慎用。


8. 删除索引

删除索引,使用 DELETE 关键字

DELETE twitter
1
curl -XDELETE 'http://127.0.0.1:9200/twitter?pretty'

9. 查询索引相关信息

GET twitter
1
2
curl -XGET '127.0.0.1:9200/twitter?pretty'
curl -XGET 'http://127.0.0.1:9200/twitter?pretty'

返回结果中,包含 mappings映射信息、索引创建时间、主副分片数量、索引名称

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
{
"twitter" : {
"aliases" : { },
"mappings" : {
"_doc" : {
"properties" : {
"message" : {
"type" : "text"
},
"post_date" : {
"type" : "keyword"
},
"user" : {
"type" : "text"
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1572504908444",
"number_of_shards" : "5",
"number_of_replicas" : "0",
"uuid" : "5vvAhRzASJSbA4dIXFghRw",
"version" : {
"created" : "6050099"
},
"provided_name" : "twitter"
}
}
}
}

10. 索引是否存在

查询索引是否存在
1
HEAD twitter

返回结果

1
200 - OK

11. 打开/关闭 索引

为了维护index索引的元数据,或是其他原因, index索引 允许 关闭/打开。索引关闭之后,会被禁止读写。关闭索引几乎没有集群消耗。

关闭索引
1
2
3
POST /twitter/_close

curl -XPOST 'http://127.0.0.1:9200/twitter/_close?pretty'
打开索引
1
2
3
post /twitter/_open

curl -XPOST 'http://127.0.0.1:9200/twitter/_open?pretty'

12. 类型是否存在

检查twitter索引中是否存在_doc类型

1
HEAD twitter/_mapping/_doc

13. 查看索引设置

1
GET /twitter/_settings

response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"twitter" : {
"settings" : {
"index" : {
"creation_date" : "1573376199157",
"number_of_shards" : "5",
"number_of_replicas" : "0",
"uuid" : "sUrSGMf6SZiRzgPW87wGhQ",
"version" : {
"created" : "6050099"
},
"provided_name" : "twitter"
}
}
}
}
  • creation_date:创建时间。
  • number_of_shards:每个索引的主分片数。
  • number_of_replicas:每个主分片的副本数。

可以同时查看多个索引

1
GET /twitter,testdata/_settings

response

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
{
"testdata" : {
"settings" : {
"index" : {
"creation_date" : "1567758185892",
"number_of_shards" : "5",
"number_of_replicas" : "1",
"uuid" : "OYPXyTPzQLak711_nBzCsQ",
"version" : {
"created" : "6050099"
},
"provided_name" : "testdata"
}
}
},
"twitter" : {
"settings" : {
"index" : {
"creation_date" : "1573376199157",
"number_of_shards" : "5",
"number_of_replicas" : "0",
"uuid" : "sUrSGMf6SZiRzgPW87wGhQ",
"version" : {
"created" : "6050099"
},
"provided_name" : "twitter"
}
}
}
}

查看进集群中所有索引的设置

1
get /_all/_settings

14. Reference