1. 借鑒
2. 開始
2.1 crud
對于一個(gè)名為hotel_search的索引,我們可以做一下操作
| 序號 | 操作 | 示例 | 釋義 |
|---|---|---|---|
| 1 | index ????????????????????????????? | PUT /hotel_search/_doc/1 {"name": "靚麗酒店","salas": 100} ????????????????????????????????????????????????????????????????? |
如果文檔不存在會(huì)創(chuàng)建新文檔;如果存在文檔,會(huì)先刪除現(xiàn)有文檔,再創(chuàng)建新文檔,版本號會(huì)增加 可選參數(shù)與:op_type: 在提交請求時(shí)指定op_type=create, 表示若id不存在時(shí)創(chuàng)建, 否則失敗[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} |
有兩種創(chuàng)建文檔的方式: 第1種:通過“PUT /indexName/_create/ID”創(chuàng)建,URI需要指定_create,如果文檔存在會(huì)創(chuàng)建失敗 第2種:通過“POST /indexName/_doc” 會(huì)自動(dòng)生成ID |
| 3 | get | GET /hotel_search/_doc | 獲取指定ID的文檔 |
| 4 | update | POST /hotel_search/_update/1 { "doc": { "name": "靚麗酒店" } } |
文檔已經(jīng)存在,更新只會(huì)對相應(yīng)字段做增量修改 |
| 5 | delete | DELETE /hotel_search/_doc/1 | 刪除指定ID的文檔 |
PUT index和PUT create的區(qū)別:如果文檔不存在,就索引新的文檔,否則會(huì)先刪除現(xiàn)有文檔,再創(chuàng)建新文檔,版本號會(huì)增加
2.2 bulk api
支持在一次API中,對不同索引進(jìn)行操作
- 支持index,create,update,delete四種類型的操作
- 可以指定不同的index
- 操作中單條數(shù)據(jù)操作失敗,不影響其他操作
- 返回結(jié)果包括每一條啊執(zhí)行的結(jié)果
栗子
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有啥區(qū)別呢?
_mget 是通過文檔ID列表得到文檔信息。_msearch 是根據(jù)查詢條件,搜索到相應(yīng)文檔。
2.5 精選留言
以下這段話摘自課程留言,非本人所屬,只是覺得挺好的,所以粘過來了,道聲感謝
我覺得對于ES的POST、PUT請求可以這么按照http請求的“冪等性”來理解。
https://blog.csdn.net/u010651249/article/details/84350061。
PUT方法要求是冪等的,POST方式不是冪等的,POST方法修改資源狀態(tài)時(shí),URL指示的是該資源的父級資源,待修改資源的信息在請求體中攜帶。而PUT方法修改資源狀態(tài)時(shí),URL直接指示待修改資源。
所以,對于ES的PUT請求,URL上需要明確到document ID,即可以新增又可以更新整個(gè)文檔(ES的更新都是get-有就delete-再創(chuàng)建),但無論如何都是這一個(gè)document。由于PUT請求既可以新增又可以更新的特性,為了提供put-if-absent特性,即沒有時(shí)才新增,增加了op_type=create的選項(xiàng)(op_type只有create、index)。
而POST請求URL是不需要指定ID的,每次都會(huì)創(chuàng)建一個(gè)新的文檔,就不是冪等的。
(其實(shí)PUT請求執(zhí)行的操作,把PUT換成POST也是可以的,但這個(gè)官方?jīng)]有說,是實(shí)驗(yàn)出來的)
上面是根據(jù)Http請求來區(qū)分,如果根據(jù)ES API來區(qū)分:
index: 針對整個(gè)文檔,既可以新增又可以更新;
create:只是新增操作,已有報(bào)錯(cuò),可以用PUT指定ID,或POST不指定ID;
update:指的是部分更新,官方只是說用POST,請求body里用script或 doc里包含文檔要更新的部分;
delete和read:就是delete和get請求了,比較簡單。