Elasticsearch 7.x 深入【3】文檔的增刪改

1. 借鑒

極客時(shí)間 阮一鳴老師的Elasticsearch核心技術(shù)與實(shí)戰(zhàn)

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請求了,比較簡單。

3. 大功告成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容