Skip to content

Commit

Permalink
[DOCS] Add "remove a tag" script logic as an example (#32556)
Browse files Browse the repository at this point in the history
It took me quite a while of online searching and experimenting to realize the function-call asymmetry in the Add versus Remove from a list, like the "tags" list! I realize we cannot give examples for every single thing the user wants to do in Painless, but this is such a common use case (removing a tag from a single doc, or from a set of docs with Update-By-Query) that I believe it ought to be demonstrated immediately after the "add a tag" example. We have an example of removing an entire document field, but not removing one element of a list (a multi-valued field).

Also, a minor grammar fix: I have added an apostrophe to the word "its" in the accompanying text of the example just above.
  • Loading branch information
JeffSaxeVA authored and javanna committed Aug 17, 2018
1 parent 148a76f commit efdad7d
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions docs/reference/docs/update.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ POST test/_doc/1/_update
// TEST[continued]

We can add a tag to the list of tags (note, if the tag exists, it
will still add it, since its a list):
will still add it, since it's a list):

[source,js]
--------------------------------------------------
Expand All @@ -65,6 +65,28 @@ POST test/_doc/1/_update
// CONSOLE
// TEST[continued]

We can remove a tag from the list of tags. Note that the Painless function to
`remove` a tag takes as its parameter the array index of the element you wish
to remove, so you need a bit more logic to locate it while avoiding a runtime
error. Note that if the tag was present more than once in the list, this will
remove only one occurrence of it:

[source,js]
--------------------------------------------------
POST test/_doc/1/_update
{
"script" : {
"source": "if (ctx._source.tags.contains(params.tag)) { ctx._source.tags.remove(ctx._source.tags.indexOf(params.tag)) }",
"lang": "painless",
"params" : {
"tag" : "blue"
}
}
}
--------------------------------------------------
// CONSOLE
// TEST[continued]

In addition to `_source`, the following variables are available through
the `ctx` map: `_index`, `_type`, `_id`, `_version`, `_routing`
and `_now` (the current timestamp).
Expand Down Expand Up @@ -172,7 +194,7 @@ the request was ignored.
"_index": "test",
"_type": "_doc",
"_id": "1",
"_version": 6,
"_version": 7,
"result": "noop"
}
--------------------------------------------------
Expand Down

0 comments on commit efdad7d

Please sign in to comment.