一、基本操作
1、概念讲解
Type 名, 约定都用_doc
Create: 如果ID 已经存在,会创建失败。
Index: 如果ID 不存在,创建新的文档。否则,先删除现有文档,再创建新的文档,版本会增加。
Update: 文档必须已经存在,更新只会对相应的字段做增量修改。
2、案例
操作 | 具体实现 |
---|---|
Index | PUT my_index/_doc/1{“user”:“mike”,“comment”:“I’m first study”} |
Create | PUT my_index/_create/1 {“user”:“mike”,“comment”:“I’m first study”} |
Create | POST my_index/_doc {“user”:“mike”,“comment”:“I’m first study”} // 不指定ID 自动生成 |
Read | GET my_index/_doc/1 |
Update | Post my_index/update/1 {“doc”:{“user”:“mike”,“comment”:“ES”}} |
Delete | DELETE my_index/_doc/1 |
3、Create
- 支持自动生成文档ID 和指定文档ID 两种方式
- 通过调用“post/users/_doc” => 系统会自动生成document id
- 使用HTTP PUT user/_create/1创建时,URL 中显示指定_create,如果id文档已经存在,操作失败。
PUT user/_create/1
{
"name":"flame",
"address":"山西"
"create_data":"2020/6/11"
"tags":["a","b"]
}
4、GET
- 找到文档,返回HTTP 200
文档元信息
a:_index/_type/
版本信息,同一个id的文档。文档被删除Version 也会不断增加
_source: 文档的所有原始信息
- 文档不存在,HTTP 404
GET user/_doc/1
5、Index
- index 和 create 区别
index 如果文档不存在,就索引新的文档。否则现有文档会被删除,新的文档被索引,版本信息+1。
PUT user/_create/1
{
"tags":["a","b","c"]
}
6、Update
- update 方法不会删除原来的文档,而是实现真正的数据更新。
Post 方法/Palyload 需要包含在“doc”中 必须指定doc
POST user/_update/1
{
"doc":{
"albums":["album1","album2"]
}
}
二、Bulk API
1、支持在一次API调用中,对不同的索引进行操作。
2、支持四种类型
Index 、Create 、Update 、 Delete
3、可以在URL中指定Index,也可以在请求的Payload进行
4、操作单条失败,不影响其他操作
5、返回结果包含每一条操作执行的结果
6、Bulk 操作
POST _bulk
{"index":{"_index":"test","id":"1"}}
{"field1":"value1"}
{"delete":{"_index":"test","_id":"2"}}
{"create":{"_index":"test2","_id":"3"}}
{"field1":"value3"}
{"update":{"_id":"1"},"_index":"test"}
{"doc":{"field2":"value2"}}
三、批量操作
1、批量读取 -mget
批量操作,可以减少网络连接所产生的开销,提升性能。
GET _mget
{
"docs":[
{
"index":"user",
"id":1
},
{
"index":"comment",
"id":1
}
]
}
2、批量查询 -msearch
POST users/_msearch
{}
{"query":{"match_all":{}},"from":0,"size":10}
{}
{"query":{"match_all":{}}}
{"index":"twitter2"}
{"query":{"match_all":{}}}
四、常见返回错误
问题 | 原因 |
---|---|
无法连接 | 网络故障、集群不可用 |
连接无法关闭 | 网络故障、节点出错 |
429 | 集群过于繁忙 |
4xx | 请求格式有错 |
500 | 集群内部错误 |