Conditional Execution in Pipelines

Each processor allows for an optional if condition to determine if that processor should be executed or skipped. The value of the if is a Painless script that needs to evaluate to true or false.

For example the following processor will drop the document (i.e. not index it) if the input document has a field named network_name and it is equal to Guest.

PUT _ingest/pipeline/drop_guests_network
{
  "processors": [
    {
      "drop": {
        "if": "ctx.network_name == 'Guest'"
      }
    }
  ]
}

Using that pipeline for an index request:

POST test/_doc/1?pipeline=drop_guests_network
{
  "network_name" : "Guest"
}

Results in nothing indexed since the conditional evaluated to true.

{
  "_index": "test",
  "_type": "_doc",
  "_id": "1",
  "_version": -3,
  "result": "noop",
  "_shards": {
    "total": 0,
    "successful": 0,
    "failed": 0
  }
}