diff --git a/docs/reference/ingest/apis/simulate-pipeline.asciidoc b/docs/reference/ingest/apis/simulate-pipeline.asciidoc index 278b4607121..c05bc2fa3ce 100644 --- a/docs/reference/ingest/apis/simulate-pipeline.asciidoc +++ b/docs/reference/ingest/apis/simulate-pipeline.asciidoc @@ -1,59 +1,20 @@ [[simulate-pipeline-api]] -=== Simulate Pipeline API +=== Simulate pipeline API +++++ +<titleabbrev>Simulate pipeline</titleabbrev> +++++ -The simulate pipeline API executes a specific pipeline against -the set of documents provided in the body of the request. - -You can either specify an existing pipeline to execute -against the provided documents, or supply a pipeline definition in -the body of the request. - -Here is the structure of a simulate request with a pipeline definition provided -in the body of the request: - -[source,js] --------------------------------------------------- -POST _ingest/pipeline/_simulate -{ - "pipeline" : { - // pipeline definition here - }, - "docs" : [ - { "_source": {/** first document **/} }, - { "_source": {/** second document **/} }, - // ... - ] -} --------------------------------------------------- -// NOTCONSOLE - -Here is the structure of a simulate request against an existing pipeline: - -[source,js] --------------------------------------------------- -POST _ingest/pipeline/my-pipeline-id/_simulate -{ - "docs" : [ - { "_source": {/** first document **/} }, - { "_source": {/** second document **/} }, - // ... - ] -} --------------------------------------------------- -// NOTCONSOLE - -Here is an example of a simulate request with a pipeline defined in the request -and its response: +Executes an ingest pipeline against +a set of provided documents. +//// [source,console] --------------------------------------------------- -POST _ingest/pipeline/_simulate +---- +PUT /_ingest/pipeline/my-pipeline-id { - "pipeline" : - { - "description": "_description", - "processors": [ + "description" : "example pipeline to simulate", + "processors": [ { "set" : { "field" : "field2", @@ -61,7 +22,15 @@ POST _ingest/pipeline/_simulate } } ] - }, +} +---- +// TESTSETUP +//// + +[source,console] +---- +POST /_ingest/pipeline/my-pipeline-id/_simulate +{ "docs": [ { "_index": "index", @@ -79,12 +48,128 @@ POST _ingest/pipeline/_simulate } ] } --------------------------------------------------- +---- -Response: + +[[simulate-pipeline-api-request]] +==== {api-request-title} + +POST /_ingest/pipeline/<pipeline>/_simulate + +GET /_ingest/pipeline/<pipeline>/_simulate + +POST /_ingest/pipeline/_simulate + +GET /_ingest/pipeline/_simulate + + +[[simulate-pipeline-api-desc]] +==== {api-description-title} + +The simulate pipeline API executes a specific pipeline +against a set of documents provided in the body of the request. + +You can either specify an existing pipeline +to execute against the provided documents +or supply a pipeline definition in the body of the request. + + +[[simulate-pipeline-api-path-params]] +==== {api-path-parms-title} + +`<pipeline>`:: +(Optional, string) +Pipeline ID used to simulate an ingest. + + +[[simulate-pipeline-api-query-params]] +==== {api-query-parms-title} + +`verbose`:: +(Optional, boolean) +If `true`, +the response includes output data +for each processor in the executed pipeline. + + +[[simulate-pipeline-api-request-body]] +==== {api-request-body-title} + +`description`:: +(Optional, string) +Description of the ingest pipeline. + +`processors`:: ++ +-- +(Optional, array of <<ingest-processors,processor objects>>) +Array of processors used to pre-process documents +during ingest. + +Processors are executed in the order provided. + +See <<ingest-processors>> for processor object definitions +and a list of built-in processors. +-- + +`docs`:: ++ +-- +(Required, array) +Array of documents +ingested by the pipeline. + +Document object parameters include: + +`_index`:: +(Optional, string) +Name of the index containing the document. + +`_id`:: +(Optional, string) +Unique identifier for the document. +This ID is only unique within the index. + +`_source`:: +(Required, object) +JSON body for the document. +-- + + +[[simulate-pipeline-api-example]] +==== {api-examples-title} + + +[[simulate-pipeline-api-path-parm-ex]] +===== Specify a pipeline as a path parameter + +[source,console] +---- +POST /_ingest/pipeline/my-pipeline-id/_simulate +{ + "docs": [ + { + "_index": "index", + "_id": "id", + "_source": { + "foo": "bar" + } + }, + { + "_index": "index", + "_id": "id", + "_source": { + "foo": "rab" + } + } + ] +} +---- + +The API returns the following response: [source,console-result] --------------------------------------------------- +---- { "docs": [ { @@ -117,22 +202,103 @@ Response: } ] } --------------------------------------------------- +---- // TESTRESPONSE[s/"2017-05-04T22:30:03.187Z"/$body.docs.0.doc._ingest.timestamp/] // TESTRESPONSE[s/"2017-05-04T22:30:03.188Z"/$body.docs.1.doc._ingest.timestamp/] -[[ingest-verbose-param]] -==== Viewing Verbose Results -You can use the simulate pipeline API to see how each processor affects the ingest document -as it passes through the pipeline. To see the intermediate results of -each processor in the simulate request, you can add the `verbose` parameter -to the request. -Here is an example of a verbose request and its response: +[[simulate-pipeline-api-request-body-ex]] +===== Specify a pipeline in the request body [source,console] --------------------------------------------------- -POST _ingest/pipeline/_simulate?verbose +---- +POST /_ingest/pipeline/_simulate +{ + "pipeline" : + { + "description": "_description", + "processors": [ + { + "set" : { + "field" : "field2", + "value" : "_value" + } + } + ] + }, + "docs": [ + { + "_index": "index", + "_id": "id", + "_source": { + "foo": "bar" + } + }, + { + "_index": "index", + "_id": "id", + "_source": { + "foo": "rab" + } + } + ] +} +---- + +The API returns the following response: + +[source,console-result] +---- +{ + "docs": [ + { + "doc": { + "_id": "id", + "_index": "index", + "_type": "_doc", + "_source": { + "field2": "_value", + "foo": "bar" + }, + "_ingest": { + "timestamp": "2017-05-04T22:30:03.187Z" + } + } + }, + { + "doc": { + "_id": "id", + "_index": "index", + "_type": "_doc", + "_source": { + "field2": "_value", + "foo": "rab" + }, + "_ingest": { + "timestamp": "2017-05-04T22:30:03.188Z" + } + } + } + ] +} +---- +// TESTRESPONSE[s/"2017-05-04T22:30:03.187Z"/$body.docs.0.doc._ingest.timestamp/] +// TESTRESPONSE[s/"2017-05-04T22:30:03.188Z"/$body.docs.1.doc._ingest.timestamp/] + + +[[ingest-verbose-param]] +===== View verbose results + +You can use the simulate pipeline API +to see how each processor affects the ingest document +as it passes through the pipeline. +To see the intermediate results +of each processor in the simulate request, +you can add the `verbose` parameter to the request. + +[source,console] +---- +POST /_ingest/pipeline/_simulate?verbose { "pipeline" : { @@ -169,12 +335,12 @@ POST _ingest/pipeline/_simulate?verbose } ] } --------------------------------------------------- +---- -Response: +The API returns the following response: [source,console-result] --------------------------------------------------- +---- { "docs": [ { @@ -245,8 +411,22 @@ Response: } ] } --------------------------------------------------- +---- // TESTRESPONSE[s/"2017-05-04T22:46:09.674Z"/$body.docs.0.processor_results.0.doc._ingest.timestamp/] // TESTRESPONSE[s/"2017-05-04T22:46:09.675Z"/$body.docs.0.processor_results.1.doc._ingest.timestamp/] // TESTRESPONSE[s/"2017-05-04T22:46:09.676Z"/$body.docs.1.processor_results.0.doc._ingest.timestamp/] // TESTRESPONSE[s/"2017-05-04T22:46:09.677Z"/$body.docs.1.processor_results.1.doc._ingest.timestamp/] + +//// +[source,console] +---- +DELETE /_ingest/pipeline/* +---- + +[source,console-result] +---- +{ +"acknowledged": true +} +---- +////