Merge pull request #15763 from talevy/fix/simulate
[Ingest] Fix/simulate
This commit is contained in:
commit
d1356b0a6f
|
@ -631,3 +631,278 @@ The delete pipeline api deletes pipelines by id.
|
||||||
DELETE _ingest/pipeline/my-pipeline-id
|
DELETE _ingest/pipeline/my-pipeline-id
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
// AUTOSENSE
|
// AUTOSENSE
|
||||||
|
|
||||||
|
==== Simulate pipeline API
|
||||||
|
|
||||||
|
The simulate pipeline api executes a specific pipeline against
|
||||||
|
the set of documents provided in the body of the request.
|
||||||
|
|
||||||
|
A simulate request may call upon an existing pipeline to be executed
|
||||||
|
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 provided pipeline:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
POST _ingest/pipeline/_simulate
|
||||||
|
{
|
||||||
|
"pipeline" : {
|
||||||
|
// pipeline definition here
|
||||||
|
},
|
||||||
|
"docs" : [
|
||||||
|
{ /** first document **/ },
|
||||||
|
{ /** second document **/ },
|
||||||
|
// ...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Here is the structure of a simulate request against a pre-existing pipeline:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
POST _ingest/pipeline/my-pipeline-id/_simulate
|
||||||
|
{
|
||||||
|
"docs" : [
|
||||||
|
{ /** first document **/ },
|
||||||
|
{ /** second document **/ },
|
||||||
|
// ...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
Here is an example simulate request with a provided pipeline and its response:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
POST _ingest/pipeline/_simulate
|
||||||
|
{
|
||||||
|
"pipeline" :
|
||||||
|
{
|
||||||
|
"description": "_description",
|
||||||
|
"processors": [
|
||||||
|
{
|
||||||
|
"set" : {
|
||||||
|
"field" : "field2",
|
||||||
|
"value" : "_value"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"_index": "index",
|
||||||
|
"_type": "type",
|
||||||
|
"_id": "id",
|
||||||
|
"_source": {
|
||||||
|
"foo": "bar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_index": "index",
|
||||||
|
"_type": "type",
|
||||||
|
"_id": "id",
|
||||||
|
"_source": {
|
||||||
|
"foo": "rab"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
// AUTOSENSE
|
||||||
|
|
||||||
|
response:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
{
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"doc": {
|
||||||
|
"_id": "id",
|
||||||
|
"_ttl": null,
|
||||||
|
"_parent": null,
|
||||||
|
"_index": "index",
|
||||||
|
"_routing": null,
|
||||||
|
"_type": "type",
|
||||||
|
"_timestamp": null,
|
||||||
|
"_source": {
|
||||||
|
"field2": "_value",
|
||||||
|
"foo": "bar"
|
||||||
|
},
|
||||||
|
"_ingest": {
|
||||||
|
"timestamp": "2016-01-04T23:53:27.186+0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doc": {
|
||||||
|
"_id": "id",
|
||||||
|
"_ttl": null,
|
||||||
|
"_parent": null,
|
||||||
|
"_index": "index",
|
||||||
|
"_routing": null,
|
||||||
|
"_type": "type",
|
||||||
|
"_timestamp": null,
|
||||||
|
"_source": {
|
||||||
|
"field2": "_value",
|
||||||
|
"foo": "rab"
|
||||||
|
},
|
||||||
|
"_ingest": {
|
||||||
|
"timestamp": "2016-01-04T23:53:27.186+0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
It is often useful to see how each processor affects the ingest document
|
||||||
|
as it is passed through the pipeline. To see the intermediate results of
|
||||||
|
each processor in the simulat request, a `verbose` parameter may be added
|
||||||
|
to the request
|
||||||
|
|
||||||
|
Here is an example verbose request and its response:
|
||||||
|
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
POST _ingest/pipeline/_simulate?verbose
|
||||||
|
{
|
||||||
|
"pipeline" :
|
||||||
|
{
|
||||||
|
"description": "_description",
|
||||||
|
"processors": [
|
||||||
|
{
|
||||||
|
"set" : {
|
||||||
|
"field" : "field2",
|
||||||
|
"value" : "_value2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set" : {
|
||||||
|
"field" : "field3",
|
||||||
|
"value" : "_value3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"_index": "index",
|
||||||
|
"_type": "type",
|
||||||
|
"_id": "id",
|
||||||
|
"_source": {
|
||||||
|
"foo": "bar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_index": "index",
|
||||||
|
"_type": "type",
|
||||||
|
"_id": "id",
|
||||||
|
"_source": {
|
||||||
|
"foo": "rab"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
// AUTOSENSE
|
||||||
|
|
||||||
|
response:
|
||||||
|
|
||||||
|
[source,js]
|
||||||
|
--------------------------------------------------
|
||||||
|
{
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"processor_results": [
|
||||||
|
{
|
||||||
|
"processor_id": "processor[set]-0",
|
||||||
|
"doc": {
|
||||||
|
"_id": "id",
|
||||||
|
"_ttl": null,
|
||||||
|
"_parent": null,
|
||||||
|
"_index": "index",
|
||||||
|
"_routing": null,
|
||||||
|
"_type": "type",
|
||||||
|
"_timestamp": null,
|
||||||
|
"_source": {
|
||||||
|
"field2": "_value2",
|
||||||
|
"foo": "bar"
|
||||||
|
},
|
||||||
|
"_ingest": {
|
||||||
|
"timestamp": "2016-01-05T00:02:51.383+0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"processor_id": "processor[set]-1",
|
||||||
|
"doc": {
|
||||||
|
"_id": "id",
|
||||||
|
"_ttl": null,
|
||||||
|
"_parent": null,
|
||||||
|
"_index": "index",
|
||||||
|
"_routing": null,
|
||||||
|
"_type": "type",
|
||||||
|
"_timestamp": null,
|
||||||
|
"_source": {
|
||||||
|
"field3": "_value3",
|
||||||
|
"field2": "_value2",
|
||||||
|
"foo": "bar"
|
||||||
|
},
|
||||||
|
"_ingest": {
|
||||||
|
"timestamp": "2016-01-05T00:02:51.383+0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"processor_results": [
|
||||||
|
{
|
||||||
|
"processor_id": "processor[set]-0",
|
||||||
|
"doc": {
|
||||||
|
"_id": "id",
|
||||||
|
"_ttl": null,
|
||||||
|
"_parent": null,
|
||||||
|
"_index": "index",
|
||||||
|
"_routing": null,
|
||||||
|
"_type": "type",
|
||||||
|
"_timestamp": null,
|
||||||
|
"_source": {
|
||||||
|
"field2": "_value2",
|
||||||
|
"foo": "rab"
|
||||||
|
},
|
||||||
|
"_ingest": {
|
||||||
|
"timestamp": "2016-01-05T00:02:51.384+0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"processor_id": "processor[set]-1",
|
||||||
|
"doc": {
|
||||||
|
"_id": "id",
|
||||||
|
"_ttl": null,
|
||||||
|
"_parent": null,
|
||||||
|
"_index": "index",
|
||||||
|
"_routing": null,
|
||||||
|
"_type": "type",
|
||||||
|
"_timestamp": null,
|
||||||
|
"_source": {
|
||||||
|
"field3": "_value3",
|
||||||
|
"field2": "_value2",
|
||||||
|
"foo": "rab"
|
||||||
|
},
|
||||||
|
"_ingest": {
|
||||||
|
"timestamp": "2016-01-05T00:02:51.384+0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
|
@ -207,7 +207,7 @@
|
||||||
- length: { docs.0.processor_results.1.doc._source: 3 }
|
- length: { docs.0.processor_results.1.doc._source: 3 }
|
||||||
- match: { docs.0.processor_results.1.doc._source.foo: "bar" }
|
- match: { docs.0.processor_results.1.doc._source.foo: "bar" }
|
||||||
- match: { docs.0.processor_results.1.doc._source.field2: "_value" }
|
- match: { docs.0.processor_results.1.doc._source.field2: "_value" }
|
||||||
- match: { docs.0.processor_results.1.doc._source..field3: "third_val" }
|
- match: { docs.0.processor_results.1.doc._source.field3: "third_val" }
|
||||||
- length: { docs.0.processor_results.1.doc._ingest: 1 }
|
- length: { docs.0.processor_results.1.doc._ingest: 1 }
|
||||||
- is_true: docs.0.processor_results.1.doc._ingest.timestamp
|
- is_true: docs.0.processor_results.1.doc._ingest.timestamp
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue