You are looking at preliminary documentation for a future release.
Not what you want? See the
current release documentation.
Scripted Metric Aggregation Usageedit
Fluent DSL Exampleedit
s => s
.Aggregations(a => a
.ScriptedMetric("sum_the_hard_way", sm => sm
.InitScript(ss=>ss.Inline("_agg['commits'] = []").Lang("groovy"))
.MapScript(ss=>ss.Inline("if (doc['state'].value == \"Stable\") { _agg.commits.add(doc['numberOfCommits']) }").Lang("groovy"))
.CombineScript(ss=>ss.Inline("sum = 0; for (c in _agg.commits) { sum += c }; return sum").Lang("groovy"))
.ReduceScript(ss=>ss.Inline("sum = 0; for (a in _aggs) { sum += a }; return sum").Lang("groovy"))
)
)Object Initializer Syntax Exampleedit
new SearchRequest<Project>
{
Aggregations = new ScriptedMetricAggregation("sum_the_hard_way")
{
InitScript = new InlineScript("_agg['commits'] = []") { Lang = "groovy" },
MapScript = new InlineScript("if (doc['state'].value == \"Stable\") { _agg.commits.add(doc['numberOfCommits']) }"){ Lang = "groovy" },
CombineScript = new InlineScript("sum = 0; for (c in _agg.commits) { sum += c }; return sum"){ Lang = "groovy" },
ReduceScript = new InlineScript("sum = 0; for (a in _aggs) { sum += a }; return sum"){ Lang = "groovy" }
}
}Example json output.
{
"aggs": {
"sum_the_hard_way": {
"scripted_metric": {
"init_script": {
"inline": "_agg['commits'] = []",
"lang": "groovy"
},
"map_script": {
"inline": "if (doc['state'].value == \"Stable\") { _agg.commits.add(doc['numberOfCommits']) }",
"lang": "groovy"
},
"combine_script": {
"inline": "sum = 0; for (c in _agg.commits) { sum += c }; return sum",
"lang": "groovy"
},
"reduce_script": {
"inline": "sum = 0; for (a in _aggs) { sum += a }; return sum",
"lang": "groovy"
}
}
}
}
}
Handling Responsesedit
response.ShouldBeValid();
var sumTheHardWay = response.Aggs.ScriptedMetric("sum_the_hard_way");
sumTheHardWay.Should().NotBeNull();
sumTheHardWay.Value<int>().Should().BeGreaterThan(0);