[DOCS] Adds snippet comparing two indices to the painless examples (#54563)
This commit is contained in:
parent
c40ec6a577
commit
3a8e880fe6
|
@ -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`.
|
Loading…
Reference in New Issue