elasticsearch提供批量處理的api: bulkweb
bulk API 容許在單個步驟中進行屢次 create 、 index 、 update 或 delete 請求json
bulk的請求體:api
{ action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body }\n ...
請求體爲多個單行json數據用\n連接起來elasticsearch
action/metadata行,指定操做類型和參數post
action/metadata 行指定 哪個文檔 作 什麼操做 。 action/metadata 行指定 哪個文檔 作 什麼操做 。url
action 必須是如下選項之一:code
create 若是文檔不存在,那麼就建立它。 index 建立一個新文檔或者替換一個現有的文檔。 update 部分更新一個文檔。 delete 刪除一個文檔。
metadata 應該 指定被索引、建立、更新或者刪除的文檔的 _index 、 _type 和 _idblog
例如,一個 delete 請求看起來是這樣的:索引
{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
一個create請求:文檔
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }} { "title": "My first blog post" }
create請求必須跟上一行,內容爲建立的文檔參數
若是不指定 _id ,將會自動生成一個 ID :
一個index請求:
{ "index": { "_index": "website", "_type": "blog" }} { "title": "My second blog post" }
把全部的操做組合在一塊兒,一個完整的 bulk 請求 有如下形式:
POST /_bulk { "delete": { "_index": "website", "_type": "blog", "_id": "123" }} { "create": { "_index": "website", "_type": "blog", "_id": "123" }} { "title": "My first blog post" } { "index": { "_index": "website", "_type": "blog" }} { "title": "My second blog post" } { "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} } { "doc" : {"title" : "My updated blog post"} }
bulk請求返回的結構類型以下:
{ "took": 4, "errors": false, "items": [ { "delete": { "_index": "website", "_type": "blog", "_id": "123", "_version": 2, "status": 200, "found": true }}, { "create": { "_index": "website", "_type": "blog", "_id": "123", "_version": 3, "status": 201 }}, { "create": { "_index": "website", "_type": "blog", "_id": "EiwfApScQiiy7TIKFxRCTw", "_version": 1, "status": 201 }}, { "update": { "_index": "website", "_type": "blog", "_id": "123", "_version": 4, "status": 200 }} ] }
items爲一個列表,依次是請求操做的返回結果
另外能夠將metadata中的索引,類型,文檔id均可以放在url中 metadata中若是有會覆蓋url中指定的索引類型和id