-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Backport master] Add support for rate aggregation (#5242)
* Add support for rate aggregation (#5206) * Add support for rate aggregation * Add missing XML comments * Fix namespace in master Co-authored-by: Steve Gordon <[email protected]>
- Loading branch information
1 parent
39a774f
commit 7183940
Showing
8 changed files
with
352 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
94 changes: 94 additions & 0 deletions
94
docs/aggregations/metric/rate/rate-aggregation-usage.asciidoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
:ref_current: https://www.elastic.co/guide/en/elasticsearch/reference/7.11 | ||
|
||
:github: https:/elastic/elasticsearch-net | ||
|
||
:nuget: https://www.nuget.org/packages | ||
|
||
//// | ||
IMPORTANT NOTE | ||
============== | ||
This file has been generated from https:/elastic/elasticsearch-net/tree/7.x/src/Tests/Tests/Aggregations/Metric/Rate/RateAggregationUsageTests.cs. | ||
If you wish to submit a PR for any spelling mistakes, typos or grammatical errors for this file, | ||
please modify the original csharp file found at the link and submit the PR with that change. Thanks! | ||
//// | ||
|
||
[[rate-aggregation-usage]] | ||
=== Rate Aggregation Usage | ||
|
||
A rate metrics aggregation can be used only inside a date_histogram and calculates a rate of documents or a field in each | ||
date_histogram bucket. The field values can be generated by a provided script or extracted from specific numeric or histogram fields in the documents. | ||
|
||
Be sure to read the Elasticsearch documentation on {ref_current}/search-aggregations-metrics-rate-aggregation.html[Rate Aggregation]. | ||
|
||
==== Fluent DSL example | ||
|
||
[source,csharp] | ||
---- | ||
a => a | ||
.DateHistogram("by_date", d => d | ||
.Field(f => f.StartedOn) | ||
.CalendarInterval(DateInterval.Month) | ||
.Aggregations(a => a | ||
.Rate("my_rate", m => m | ||
.Field(p => p.NumberOfCommits) | ||
.Unit(DateInterval.Month) | ||
.Mode(RateMode.Sum) | ||
))) | ||
---- | ||
|
||
==== Object Initializer syntax example | ||
|
||
[source,csharp] | ||
---- | ||
new DateHistogramAggregation("by_date") | ||
{ | ||
Field = Field<Project>(p => p.StartedOn), | ||
CalendarInterval = DateInterval.Month, | ||
Aggregations = new RateAggregation("my_rate", Field<Project>(p => p.NumberOfCommits)) | ||
{ | ||
Unit = DateInterval.Month, | ||
Mode = RateMode.Sum | ||
} | ||
} | ||
---- | ||
|
||
[source,javascript] | ||
.Example json output | ||
---- | ||
{ | ||
"by_date": { | ||
"date_histogram": { | ||
"field": "startedOn", | ||
"calendar_interval": "month" | ||
}, | ||
"aggs": { | ||
"my_rate": { | ||
"rate": { | ||
"field": "numberOfCommits", | ||
"unit": "month", | ||
"mode": "sum" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
---- | ||
|
||
==== Handling Responses | ||
|
||
[source,csharp] | ||
---- | ||
response.ShouldBeValid(); | ||
var dateHistogram = response.Aggregations.DateHistogram("by_date"); | ||
dateHistogram.Should().NotBeNull(); | ||
dateHistogram.Buckets.Should().NotBeNull(); | ||
dateHistogram.Buckets.Count.Should().BeGreaterThan(10); | ||
foreach (var item in dateHistogram.Buckets) | ||
{ | ||
var rate = item.Rate("my_rate"); | ||
rate.Should().NotBeNull(); | ||
rate.Value.Should().BeGreaterOrEqualTo(1); | ||
} | ||
---- | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
// Licensed to Elasticsearch B.V under one or more agreements. | ||
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License. | ||
// See the LICENSE file in the project root for more information | ||
|
||
using System.Runtime.Serialization; | ||
using Elasticsearch.Net; | ||
using Nest.Utf8Json; | ||
|
||
namespace Nest | ||
{ | ||
[InterfaceDataContract] | ||
[ReadAs(typeof(RateAggregation))] | ||
public interface IRateAggregation : IMetricAggregation | ||
{ | ||
/// <summary> | ||
/// The <see cref="DateInterval"/> to use as the rate unit. | ||
/// </summary> | ||
[DataMember(Name = "unit")] | ||
DateInterval? Unit { get; set; } | ||
|
||
/// <summary> | ||
/// The mode to use in the rate calculation. By default, "sum" mode is used. | ||
/// </summary> | ||
/// <remarks> | ||
/// The mode may be either "sum", where the rate calculates the sum of field values, or | ||
/// "value_count", where the rate uses the number of values in the field. | ||
/// </remarks> | ||
[DataMember(Name = "mode")] | ||
RateMode? Mode { get; set; } | ||
} | ||
|
||
public class RateAggregation : MetricAggregationBase, IRateAggregation | ||
{ | ||
public RateAggregation(string name) : base(name, null) { } | ||
public RateAggregation(string name, Field field) : base(name, field) { } | ||
|
||
internal override void WrapInContainer(AggregationContainer c) => c.Rate = this; | ||
|
||
/// <inheritdoc cref ="IRateAggregation.Unit"/> | ||
public DateInterval? Unit { get; set; } | ||
|
||
/// <inheritdoc cref ="IRateAggregation.Mode"/> | ||
public RateMode? Mode { get; set; } | ||
} | ||
|
||
public class RateAggregationDescriptor<T> | ||
: MetricAggregationDescriptorBase<RateAggregationDescriptor<T>, IRateAggregation, T>, IRateAggregation | ||
where T : class | ||
{ | ||
DateInterval? IRateAggregation.Unit { get; set; } | ||
|
||
RateMode? IRateAggregation.Mode { get; set; } | ||
|
||
/// <inheritdoc cref ="IRateAggregation.Unit"/> | ||
public RateAggregationDescriptor<T> Unit(DateInterval? dateInterval) => | ||
Assign(dateInterval, (a, v) => a.Unit = v); | ||
|
||
/// <inheritdoc cref ="IRateAggregation.Mode"/> | ||
public RateAggregationDescriptor<T> Mode(RateMode? mode) => | ||
Assign(mode, (a, v) => a.Mode = v); | ||
} | ||
|
||
[StringEnum] | ||
public enum RateMode | ||
{ | ||
/// <summary> | ||
/// Rate calculates the sum of field values. | ||
/// </summary> | ||
[EnumMember(Value = "sum")] | ||
Sum, | ||
|
||
/// <summary> | ||
/// Rate uses the number of values in the field. | ||
/// </summary> | ||
[EnumMember(Value = "value_count")] | ||
ValueCount | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.