Tirexs v0.8.15 Tirexs.Bulk
The Bulk API makes it possible to perform many index/delete operations in single call.
This module provides DSL for building Bulk API payload
which is ready to use
over Tirexs.Resources.bump/1
or Tirexs.HTTP.post/2
conveniences.
The Tirexs.Resources.bump/1
expects payload
as a set of JSON documents joined
together by newline (
) characters.
payload = ~S'''
{ "index": { "_index": "website", "_type": "blog", "_id": "1" }}
{ "title": "My second blog post" }
'''
# { :ok, 200, r } = HTTP.post("/_bulk", payload)
# { :ok, 200, r } = Resources.bump(payload)._bulk({ [refresh: true] })
{ :ok, 200, r } = Resources.bump(payload)._bulk()
A bulk
macro helps create a single payload
from parts (action
, metadata
, request body
)
where you Don’t need to Repeat Yourself ;).
For instance:
payload = bulk([ index: "website", type: "blog" ]) do
index [
[id: 1, title: "My first blog post"],
[id: 2, title: "My second blog post"]
]
update [
[
doc: [id: 1, _retry_on_conflict: 3, title: "[updated] My first blog post"],
fields: ["_source"],
],
[
doc: [id: 2, _retry_on_conflict: 3, title: "[updated] My second blog post"],
doc_as_upsert: true,
]
]
end
Find out more details and examples in the bulk/2
macro doc.
Summary
Functions
Prepares request_body
and create
action all together
Prepares request_body
and delete
action all together
Prepares request_body
and index
action all together
Prepares request_body
and update
action all together
Macros
Builds payload
from given block and returns the Bulk API JSON structure
Functions
Macros
Builds payload
from given block and returns the Bulk API JSON structure.
The Bulk request body has the following action
, metadata
and request body
parts.
The bulk to particular _index/_type
:
payload = bulk do
index [
[id: 1, title: "My second blog post"]
# ...
]
end
Tirexs.bump(payload)._bulk("website/blog", { [refresh: true] })
The same metadata
for every document:
payload = bulk([ index: "website", type: "blog" ]) do
index [
[id: 1, title: "My second blog post"]
# ...
]
end
Tirexs.bump(payload)._bulk()
Index specific insertion:
payload = bulk do
index [ index: "website.a", type: "blog" ], [
[title: "My blog post"]
# ...
]
index [ index: "website.b", type: "blog" ], [
[title: "My blog post"]
# ...
]
end
Tirexs.bump(payload)._bulk()
The action
could be index
, create
, update
and delete
.
Update example:
bulk do
update [ index: "website", type: "blog"], [
[
doc: [id: 1, _retry_on_conflict: 3, title: "[updated] My first blog post"],
fields: ["_source"],
],
[
doc: [id: 2, _retry_on_conflict: 3, title: "[updated] My second blog post"],
doc_as_upsert: true,
]
]
end
Delete example:
bulk do
delete [ index: "website.b", type: "blog" ], [
[id: "1"]
# ...
]
end