自学ES-03之文档

文档写入

单条写入

ES 中文档写入是 POST 请求。

1
POST /{index_name}/_doc/{_id}
  • {index_name} : 索引名称,必须有。
  • {_id} 可以没有,如果没有 ES 会自动生成,并在写入成功后返回。如果有,使用指定的 id。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
POST /sjl/_doc/001
{
"title": "工程师"
}
响应如下:
{
"_index" : "sjl",
"_type" : "_doc",
"_id" : "002",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 7,
"_primary_term" : 3
}

批量写入

ES 批量写入,统一调 _bulk

1
2
3
4
5
POOST /_bulk
{"index": {"_index": index_name, _id:id}
{"data": xxx}
{"index": {"_index": index_name, _id:id}
{"data": xxx}
  • index_name:索引名称
  • _id: 可以省略

示例

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
POST /_bulk
{"index": {"_index": "sjl", "_id": "003"}}
{"title": "工程师3"}
{"index": {"_index": "sjl", "_id": "004"}}
{"title": "工程师4"}

----- 响应信息---------
{
"took" : 5,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "sjl",
"_type" : "_doc",
"_id" : "003",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 8,
"_primary_term" : 3,
"status" : 201
}
},
{
"index" : {
"_index" : "sjl",
"_type" : "_doc",
"_id" : "004",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 9,
"_primary_term" : 3,
"status" : 201
}
}
]
}

在某些情况下,我们直接使用 curl 读取一个文件也可以完成批量的写入。原理:curl 从文件读数据,然后调 ES 批量写入接口进行数据写入。

示例

1
curl -s -X POST 'ES:9200/_bulk?preety' --data-binary "@bulk_doc.json" 
  • -s: 不输出错误和进度信息
  • -X: 请求请求方式为 POST
  • –data-binary:二进制POST 的请求体
  • @bulk_doc.json:指定文件目录

文档修改

单条修改

1
2
3
4
5
6
7
POST /{idnex_name}/_update/{_id}
{
"doc": {
"修改字段名": "修改字段值”,
xxx: xx
}
}

示例

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
-----查询 sjl索引下的id:004 数据------
GET /sjl/_doc/004
{
"_index" : "sjl",
"_type" : "_doc",
"_id" : "004",
"_version" : 3,
"_seq_no" : 11,
"_primary_term" : 3,
"found" : true,
"_source" : {
"title" : "工程师4"
}
}

------- 修改数据-----------
POST /sjl/_update/004
{
"doc": {
"age": 26
}
}
#这条数据原来是有一个 title: 工程师4的数据在
#查询一下结果
GET /sjl/_doc/004
---- 返回结果-----
{
"_index" : "sjl",
"_type" : "_doc",
"_id" : "004",
"_version" : 3,
"_seq_no" : 11,
"_primary_term" : 3,
"found" : true,
"_source" : {
"title" : "工程师4",
"age" : 26
}
}


批量修改

文档删除

单条删除

批量删除

文档查询