[DOCS] Adds snippet comparing two indices to the painless examples (#54563)

This commit is contained in:
István Zoltán Szabó 2020-04-02 08:44:35 +02:00
parent c40ec6a577
commit 3a8e880fe6
1 changed files with 75 additions and 3 deletions

View File

@ -14,6 +14,8 @@ more about the Painless scripting language in the
* <<painless-time-features>> * <<painless-time-features>>
* <<painless-group-by>> * <<painless-group-by>>
* <<painless-bucket-script>> * <<painless-bucket-script>>
* <<painless-count-http>>
* <<painless-compare>>
NOTE: While the context of the following examples is the {transform} use case, NOTE: While the context of the following examples is the {transform} use case,
the Painless scripts in the snippets below can be used in other {es} search the Painless scripts in the snippets below can be used in other {es} search
@ -59,8 +61,8 @@ scripted metric aggregation in a {transform}, which provides a metric output.
`last_doc` in the `state` object. `last_doc` in the `state` object.
<2> The `map_script` defines `current_date` based on the timestamp of the <2> The `map_script` defines `current_date` based on the timestamp of the
document, then compares `current_date` with `state.timestamp_latest`, finally document, then compares `current_date` with `state.timestamp_latest`, finally
returns `state.last_doc` from the shard. By using `new HashMap(...)` we copy the returns `state.last_doc` from the shard. By using `new HashMap(...)` you copy
source document, this is important whenever you want to pass the full source the source document, this is important whenever you want to pass the full source
object from one phase to the next. object from one phase to the next.
<3> The `combine_script` returns `state` from each shard. <3> The `combine_script` returns `state` from each shard.
<4> The `reduce_script` iterates through the value of `s.timestamp_latest` <4> The `reduce_script` iterates through the value of `s.timestamp_latest`
@ -399,3 +401,73 @@ by each shard and assigns the different response types to the appropriate
properties of the `counts` object; error responses to the error counts, success properties of the `counts` object; error responses to the error counts, success
responses to the success counts, and other responses to the other counts. responses to the success counts, and other responses to the other counts.
Finally, returns the `counts` array with the response counts. Finally, returns the `counts` array with the response counts.
[discrete]
[[painless-compare]]
==== Comparing indices by using scripted metric aggregations
This example shows how to compare the content of two indices by a {transform}
that uses a scripted metric aggregation.
[source,console]
--------------------------------------------------
POST _transform/_preview
{
"id" : "index_compare",
"source" : { <1>
"index" : [
"index1",
"index2"
],
"query" : {
"match_all" : { }
}
},
"dest" : { <2>
"index" : "compare"
},
"pivot" : {
"group_by" : {
"unique-id" : {
"terms" : {
"field" : "<unique-id-field>" <3>
}
}
},
"aggregations" : {
"compare" : { <4>
"scripted_metric" : {
"init_script" : "",
"map_script" : "state.doc = new HashMap(params['_source'])", <5>
"combine_script" : "return state", <6>
"reduce_script" : """ <7>
if (states.size() != 2) {
return "count_mismatch"
}
if (states.get(0).equals(states.get(1))) {
return "match"
} else {
return "mismatch"
}
"""
}
}
}
}
}
--------------------------------------------------
// TEST[skip:setup kibana sample data]
<1> The indices referenced in the `source` object are compared to each other.
<2> The `dest` index contains the results of the comparison.
<3> The `group_by` field needs to be a unique identifier for each document.
<4> Object of the `scripted_metric` aggregation.
<5> The `map_script` defines `doc` in the state object. By using
`new HashMap(...)` you copy the source document, this is important whenever you
want to pass the full source object from one phase to the next.
<6> The `combine_script` returns `state` from each shard.
<7> The `reduce_script` checks if the size of the indices are equal. If they are
not equal, than it reports back a `count_mismatch`. Then it iterates through all
the values of the two indices and compare them. If the values are equal, then it
returns a `match`, otherwise returns a `mismatch`.