lib/elasticsearch/api/actions/bulk.rb in elasticsearch-api-6.1.0 vs lib/elasticsearch/api/actions/bulk.rb in elasticsearch-api-6.2.0
- old
+ new
@@ -6,10 +6,12 @@
#
# Supports various different formats of the payload: Array of Strings, Header/Data pairs,
# or the conveniency "combined" format where data is passed along with the header
# in a single item in a custom `:data` key.
#
+ # @note The body argument is required and cannot be empty.
+ #
# @example Perform three operations in a single request, passing actions and data as an array of hashes
#
# client.bulk body: [
# { index: { _index: 'myindex', _type: 'mytype', _id: 1 } },
# { title: 'foo' },
@@ -45,11 +47,11 @@
#
# ]
#
# @option arguments [String] :index Default index for items which don't provide one
# @option arguments [String] :type Default document type for items which don't provide one
- # @option arguments [Hash] :body The operation definition and data (action-data pairs), separated by newlines (*Required*)
+ # @option arguments [Hash] :body The operation definition and data (action-data pairs), separated by newlines (*Required*). Note that this cannot be empty.
# @option arguments [String] :wait_for_active_shards Sets the number of shard copies that must be active before proceeding with the bulk operation. Defaults to 1, meaning the primary shard only. Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal to the total number of copies for the shard (number of replicas + 1)
# @option arguments [String] :refresh If `true` then refresh the effected shards to make this operation visible to search, if `wait_for` then wait for a refresh to make this operation visible to search, if `false` (the default) then do nothing with refreshes. (options: true, false, wait_for)
# @option arguments [String] :routing Specific routing value
# @option arguments [Time] :timeout Explicit operation timeout
# @option arguments [String] :type Default document type for items which don't provide one
@@ -66,34 +68,39 @@
def bulk(arguments={})
arguments = arguments.clone
type = arguments.delete(:type)
- valid_params = [
- :wait_for_active_shards,
- :refresh,
- :routing,
- :timeout,
- :type,
- :fields,
- :_source,
- :_source_exclude,
- :_source_include,
- :pipeline ]
-
method = HTTP_POST
path = Utils.__pathify Utils.__escape(arguments[:index]), Utils.__escape(type), '_bulk'
- params = Utils.__validate_and_extract_params arguments, valid_params
+ params = Utils.__validate_and_extract_params arguments, ParamsRegistry.get(__method__)
body = arguments[:body]
if body.is_a? Array
payload = Utils.__bulkify(body)
else
payload = body
end
perform_request(method, path, params, payload, {"Content-Type" => "application/x-ndjson"}).body
end
+
+ # Register this action with its valid params when the module is loaded.
+ #
+ # @since 6.2.0
+ ParamsRegistry.register(:bulk, [
+ :wait_for_active_shards,
+ :refresh,
+ :routing,
+ :timeout,
+ :type,
+ :fields,
+ :_source,
+ :_source_exclude,
+ :_source_excludes,
+ :_source_include,
+ :_source_includes,
+ :pipeline ].freeze)
end
end
end