From 4305bd1aaf4d9c8275132fc38b69482a37262fd4 Mon Sep 17 00:00:00 2001 From: paulness Date: Tue, 23 Aug 2022 15:02:57 -0400 Subject: [PATCH 1/3] Add script property to VariableWidthHistogram --- .../VariableWidthHistogramAggregation.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs b/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs index 6408435ecf3..72281b97e03 100644 --- a/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs +++ b/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs @@ -24,9 +24,12 @@ public interface IVariableWidthHistogramAggregation : IBucketAggregation [DataMember(Name = "initial_buffer")] int? InitialBuffer { get; set; } - + [DataMember(Name = "shard_size")] int? ShardSize { get; set; } + + [DataMember(Name = "script")] + string Script { get; set; } } public class VariableWidthHistogramAggregation : BucketAggregationBase, IVariableWidthHistogramAggregation @@ -42,6 +45,8 @@ public VariableWidthHistogramAggregation(string name) : base(name) { } /// public int? ShardSize { get; set; } + public string Script { get; set; } + internal override void WrapInContainer(AggregationContainer c) => c.VariableWidthHistogram = this; } @@ -53,6 +58,7 @@ public class VariableWidthHistogramAggregationDescriptor int? IVariableWidthHistogramAggregation.Buckets { get; set; } int? IVariableWidthHistogramAggregation.InitialBuffer { get; set; } int? IVariableWidthHistogramAggregation.ShardSize { get; set; } + string IVariableWidthHistogramAggregation.Script { get; set; } /// public VariableWidthHistogramAggregationDescriptor Field(Field field) => Assign(field, (a, v) => a.Field = v); @@ -68,5 +74,8 @@ public class VariableWidthHistogramAggregationDescriptor /// public VariableWidthHistogramAggregationDescriptor ShardSize(int? shardSize) => Assign(shardSize, (a, v) => a.ShardSize = v); + + /// + public VariableWidthHistogramAggregationDescriptor Script(string script) => Assign(script, (a, v) => a.Script = v); } } From ca872ad6bd7f8ff8e63b2f61a8a997b3addc57b2 Mon Sep 17 00:00:00 2001 From: paulness Date: Tue, 23 Aug 2022 16:14:46 -0400 Subject: [PATCH 2/3] Add test for VariableWidthHistogram script usage --- .../VariableWidthHistogramUsageTests.cs | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs b/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs index 42d5e158898..a57626b71df 100644 --- a/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs +++ b/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs @@ -83,4 +83,72 @@ protected override void ExpectResponse(ISearchResponse response) counts.Meta["foo"].Should().Be("bar"); } } + + // hide + [SkipVersion("<7.11.0", "Variable width aggregation added in 7.11.0")] + public class VariableWidthHistogramWithScriptUsageTests : AggregationUsageTestBase + { + public VariableWidthHistogramWithScriptUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, usage) { } + + private const string Script = "Math.min(_value, -1)"; // use inline script to force the number of commits to be -1 for all documents + + protected override object AggregationJson => new + { + commits = new + { + meta = new + { + foo = "bar" + }, + variable_width_histogram = new + { + field = "numberOfCommits", + buckets = 2, + initial_buffer = 2, + shard_size = 100, + script = Script + } + } + }; + + protected override Func, IAggregationContainer> FluentAggs => a => a + .VariableWidthHistogram("commits", v => v + .Field(f => f.NumberOfCommits) + .Buckets(2) + .InitialBuffer(2) + .ShardSize(100) + .Script(Script) + .Meta(m => m + .Add("foo", "bar") + )); + + protected override AggregationDictionary InitializerAggs => + new VariableWidthHistogramAggregation("commits") + { + Field = Field(f => f.NumberOfCommits), + Buckets = 2, + InitialBuffer = 2, + ShardSize = 100, + Script = Script, + Meta = new Dictionary + { + { "foo", "bar" } + } + }; + + protected override void ExpectResponse(ISearchResponse response) + { + response.ShouldBeValid(); + var counts = response.Aggregations.VariableWidthHistogram("commits"); + counts.Should().NotBeNull(); + counts.Buckets.Should().HaveCount(1); + var firstBucket = counts.Buckets.First(); + firstBucket.Key.Should().Be(-1); + firstBucket.Minimum.Should().Be(-1); + firstBucket.Maximum.Should().Be(-1); + firstBucket.DocCount.Should().BeGreaterOrEqualTo(1); + counts.Meta.Should().NotBeNull().And.HaveCount(1); + counts.Meta["foo"].Should().Be("bar"); + } + } } From cb977306f9dbb7da2421422e1b72145ac5b1a2b9 Mon Sep 17 00:00:00 2001 From: paulness Date: Wed, 24 Aug 2022 11:43:39 -0400 Subject: [PATCH 3/3] Change from script to IScript to match the IMultiTermsAggregation --- .../VariableWidthHistogramAggregation.cs | 12 ++++++++---- .../VariableWidthHistogramUsageTests.cs | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs b/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs index 72281b97e03..81814b1e3bb 100644 --- a/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs +++ b/src/Nest/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramAggregation.cs @@ -29,7 +29,7 @@ public interface IVariableWidthHistogramAggregation : IBucketAggregation int? ShardSize { get; set; } [DataMember(Name = "script")] - string Script { get; set; } + IScript Script { get; set; } } public class VariableWidthHistogramAggregation : BucketAggregationBase, IVariableWidthHistogramAggregation @@ -45,7 +45,7 @@ public VariableWidthHistogramAggregation(string name) : base(name) { } /// public int? ShardSize { get; set; } - public string Script { get; set; } + public IScript Script { get; set; } internal override void WrapInContainer(AggregationContainer c) => c.VariableWidthHistogram = this; } @@ -58,7 +58,7 @@ public class VariableWidthHistogramAggregationDescriptor int? IVariableWidthHistogramAggregation.Buckets { get; set; } int? IVariableWidthHistogramAggregation.InitialBuffer { get; set; } int? IVariableWidthHistogramAggregation.ShardSize { get; set; } - string IVariableWidthHistogramAggregation.Script { get; set; } + IScript IVariableWidthHistogramAggregation.Script { get; set; } /// public VariableWidthHistogramAggregationDescriptor Field(Field field) => Assign(field, (a, v) => a.Field = v); @@ -76,6 +76,10 @@ public class VariableWidthHistogramAggregationDescriptor public VariableWidthHistogramAggregationDescriptor ShardSize(int? shardSize) => Assign(shardSize, (a, v) => a.ShardSize = v); /// - public VariableWidthHistogramAggregationDescriptor Script(string script) => Assign(script, (a, v) => a.Script = v); + public VariableWidthHistogramAggregationDescriptor Script(string script) => Assign((InlineScript)script, (a, v) => a.Script = v); + + /// + public VariableWidthHistogramAggregationDescriptor Script(Func scriptSelector) => + Assign(scriptSelector, (a, v) => a.Script = v?.Invoke(new ScriptDescriptor())); } } diff --git a/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs b/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs index a57626b71df..3203b498751 100644 --- a/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs +++ b/tests/Tests/Aggregations/Bucket/VariableWidthHistogram/VariableWidthHistogramUsageTests.cs @@ -106,7 +106,9 @@ public VariableWidthHistogramWithScriptUsageTests(ReadOnlyCluster i, EndpointUsa buckets = 2, initial_buffer = 2, shard_size = 100, - script = Script + script = new { + source = Script + } } } }; @@ -129,7 +131,7 @@ public VariableWidthHistogramWithScriptUsageTests(ReadOnlyCluster i, EndpointUsa Buckets = 2, InitialBuffer = 2, ShardSize = 100, - Script = Script, + Script = new InlineScript(Script), Meta = new Dictionary { { "foo", "bar" }