1. 程式人生 > 其它 >ElasticSearch 7.3採用restful風格 批量(bulk)增刪改

ElasticSearch 7.3採用restful風格 批量(bulk)增刪改

Bulk 操作是將文件的增刪改查一些列操作,通過一次請求全都做完。目的是減少網路傳輸次數。

語法:

POST /_bulk
{"action": {"metadata"}}
{"data"}

如下操作,建立14,建立5,刪除5,更新14

POST /_bulk
{ "create": { "_index": "test_index",  "_id": "14" }}
{ "test_field": "test14" }
{ "create": { "_index": "test_index",  "_id": "5" }}
{ "test_field": "test14" }
{ "delete": { "_index": "test_index",  "_id": "5" }} 
{ "update": { "_index": "test_index",  "_id": "14"} }
{ "doc" : {"test_field" : "bulk test"} }

結果

{
  "took" : 1520,
  "errors" : false,
  "items" : [
    {
      "create" : {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "14",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 0,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "create" : {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "5",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 1,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "delete" : {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "5",
        "_version" : 2,
        "result" : "deleted",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 2,
        "_primary_term" : 1,
        "status" : 200
      }
    },
    {
      "update" : {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "14",
        "_version" : 2,
        "result" : "updated",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 3,
        "_primary_term" : 1,
        "status" : 200
      }
    }
  ]
}

總結:

為啥不採用Java裡面傳統的Json物件去實現批量操作,原因為解析Json字串的時候,會保留一個比較大的Json物件放在Java記憶體中,大資料量的時候明顯不可取。因此按照普通字串讀取就OK了。

1. 功能:

  • delete:刪除一個文件,只要1個json串就可以了
  • create:相當於強制建立 PUT /index/type/id/_create
  • index:普通的put操作,可以是建立文件,也可以是全量替換文件
  • update:執行的是區域性更新partial update操作

2. 格式:每個json不能換行。相鄰json必須換行。

3. 隔離:每個操作互不影響。操作失敗的行會返回其失敗資訊。

4. 實際用法:bulk請求一次不要太大,否則一下積壓到記憶體中,效能會下降。所以,一次請求幾千個操作、大小在幾M正好。