1. 借鉴
2. 开始
2.1 crud
对于一个名为hotel_search的索引,我们可以做一下操作
序号 | 操作 | 示例 | 释义 |
---|---|---|---|
1 | index | PUT /hotel_search/_doc/1 {"name": "靓丽酒店","salas": 100} |
如果文档不存在会创建新文档;如果存在文档,会先删除现有文档,再创建新文档,版本号会增加 可选参数与:op_type: 在提交请求时指定op_type=create, 表示若id不存在时创建, 否则失败[PUT /hotel_search/_doc/1?op_type=create] |
2 | create | PUT /hotel_search/_create/1 {"name": "靓丽酒店1","salas": 100} POST /hotel_search/_doc {"name": "靓丽酒店10086","salas": 100} |
有两种创建文档的方式: 第1种:通过“PUT /indexName/_create/ID”创建,URI需要指定_create,如果文档存在会创建失败 第2种:通过“POST /indexName/_doc” 会自动生成ID |
3 | get | GET /hotel_search/_doc | 获取指定ID的文档 |
4 | update | POST /hotel_search/_update/1 { "doc": { "name": "靓丽酒店" } } |
文档已经存在,更新只会对相应字段做增量修改 |
5 | delete | DELETE /hotel_search/_doc/1 | 删除指定ID的文档 |
PUT index和PUT create的区别:如果文档不存在,就索引新的文档,否则会先删除现有文档,再创建新文档,版本号会增加
2.2 bulk api
支持在一次API中,对不同索引进行操作
- 支持index,create,update,delete四种类型的操作
- 可以指定不同的index
- 操作中单条数据操作失败,不影响其他操作
- 返回结果包括每一条啊执行的结果
栗子
PUT /_bulk
{ "index": { "_index": "hotel_search", "_id": 1}}
{ "name": "靓丽酒店" }
{"delete": {"_index": "hotel_search_v1", "_id": 2}}
{"create": { "_index": "hotel_search", "_id": 3}}
{ "name": "草莓酒店" }
{ "update": { "_id": "1", "_index": "hotel_search"} }
{ "doc": { "name": "青春酒店" }}
2.3 mget
批量操作
- 栗子
GET _mget
{
"docs": [
{
"_index": "hotel_search",
"_id": 1
},
{
"_index": "hotel_search",
"_id": 2
}
]
}
2.4 msearch
批量查询
- 栗子
GET /hotel_search/_msearch
{}
{"query": {"match_all":{}}, "from": 0, "size": 10 }
{}
{"query": {"match_all":{}}}
{"index": "movies"}
{"query": { "match_all":{}}}
2.5 _mget 和 _msearch有啥区别呢?
_mget 是通过文档ID列表得到文档信息。_msearch 是根据查询条件,搜索到相应文档。
2.5 精选留言
以下这段话摘自课程留言,非本人所属,只是觉得挺好的,所以粘过来了,道声感谢
我觉得对于ES的POST、PUT请求可以这么按照http请求的“幂等性”来理解。
https://blog.csdn.net/u010651249/article/details/84350061。
PUT方法要求是幂等的,POST方式不是幂等的,POST方法修改资源状态时,URL指示的是该资源的父级资源,待修改资源的信息在请求体中携带。而PUT方法修改资源状态时,URL直接指示待修改资源。
所以,对于ES的PUT请求,URL上需要明确到document ID,即可以新增又可以更新整个文档(ES的更新都是get-有就delete-再创建),但无论如何都是这一个document。由于PUT请求既可以新增又可以更新的特性,为了提供put-if-absent特性,即没有时才新增,增加了op_type=create的选项(op_type只有create、index)。
而POST请求URL是不需要指定ID的,每次都会创建一个新的文档,就不是幂等的。
(其实PUT请求执行的操作,把PUT换成POST也是可以的,但这个官方没有说,是实验出来的)
上面是根据Http请求来区分,如果根据ES API来区分:
index: 针对整个文档,既可以新增又可以更新;
create:只是新增操作,已有报错,可以用PUT指定ID,或POST不指定ID;
update:指的是部分更新,官方只是说用POST,请求body里用script或 doc里包含文档要更新的部分;
delete和read:就是delete和get请求了,比较简单。
网友评论