ES 增刪改(關於文檔的操作)以及批量操作

1、create 新增記錄

1.1 新增記錄不指定id,讓es自動生成

POST logs/_doc
{
  "Level":"Warn",
  "Content":"111"
}

結果如下:

{
  "_index" : "logs",
  "_id" : "Hd5vpoIBC5fFiL3XSTWi",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

此時id由es自動生成爲一個guid.

 

1.2 通過put id不存在做插入操作,id存在全量替換

PUT logs/_doc/1
{
  "Level":"Warn",
  "Content":"111"
}

結果如下:

{
  "_index" : "logs",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

第一次創建result是created,說明創建成功.但是如果再次執行上面的插入代碼result就會變爲updated,put會做全量替換.

 

1.3 通過put搭配created解決全量替換的問題

PUT logs/_create/2
{
  "Level":"Warn",
  "Content":"111"
}

在指定操作是created時,如果重複插入會拋異常

 

2、delete 刪除記錄

es中的刪除是軟刪除,每條記錄會維護一個版本號,通過變更狀態和版本來標記刪除.具體刪除生效時間參數值可配置.

DELETE logs/_doc/1

 

3、update 部分字段更新操作

如果需要更新某條記錄的部分字段,代碼如下:

POST logs/_update/2
{
  "doc": {
    "Level":"Error"
  }
}

這樣實現了對id爲2的記錄的Level字段的更新.也可以通過update更新全部字段,這裏不做講解.

 

4、指定執行失敗是否輸出錯誤信息(這裏常用於批量操作)

PUT logs/_create/3?filter_path=items.*.error
{
  "Level":"Warn",
  "Content":"111"
}

這裏如果id爲3的記錄不存在會輸出"{}",存在則輸出異常信息,常用於批量操作.

 

5、_bulk批量操作

_bulk相對於上面的單條語句操作的優勢是,使用了更少的內存.但是其可讀性很差.

POST _bulk?filter_path=items.*.error
{"create":{"_index":"logs","_id":33}}
{"Level":"Warn","Content":"111"}
{"update":{"_index":"logs","_id":33}}
{"doc":{"Level":"Error"}}
{"delete":{"_index":"logs","_id":33}}

這裏連續執行了create、delete、upddate等三個批量操作,異常信息會輸出,如果不存在則輸出"{}".

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章