From 554c8131f49655e3754cc6d0d4d11d36f078c42d Mon Sep 17 00:00:00 2001 From: Russ Cam Date: Thu, 30 Nov 2017 18:00:56 +1100 Subject: [PATCH] Make Terms order assignative Deprecate Terms order _terms with Obsolete attributes Closes #2840 --- .../Bucket/Terms/TermsAggregation.cs | 20 ++-------------- .../Aggregations/Bucket/Terms/TermsOrder.cs | 8 +++---- .../Bucket/Terms/TermsOrderDescriptor.cs | 24 +++++++++++++++++++ .../Terms/TermsAggregationUsageTests.cs | 24 ++++++++++++------- 4 files changed, 45 insertions(+), 31 deletions(-) create mode 100644 src/Nest/Aggregations/Bucket/Terms/TermsOrderDescriptor.cs diff --git a/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs b/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs index a7c44c9d813..228f30f1ee9 100644 --- a/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs +++ b/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs @@ -47,7 +47,6 @@ public interface ITermsAggregation : ITermsAggregation { [JsonProperty("missing")] TFieldType Missing { get; set; } - } public class TermsAggregation : BucketAggregationBase, ITermsAggregation @@ -125,23 +124,8 @@ public TermsAggregationDescriptor MinimumDocumentCount(int minimu public TermsAggregationDescriptor ExecutionHint(TermsAggregationExecutionHint executionHint) => Assign(a => a.ExecutionHint = executionHint); - public TermsAggregationDescriptor Order(TermsOrder order) => Assign(a => - { - a.Order = a.Order ?? new List(); - a.Order.Add(order); - }); - - public TermsAggregationDescriptor OrderAscending(string key) => Assign(a => - { - a.Order = a.Order ?? new List(); - a.Order.Add(new TermsOrder { Key = key, Order = SortOrder.Ascending }); - }); - - public TermsAggregationDescriptor OrderDescending(string key) => Assign(a => - { - a.Order = a.Order ?? new List(); - a.Order.Add(new TermsOrder { Key = key, Order = SortOrder.Descending }); - }); + public TermsAggregationDescriptor Order(Func, IPromise>> selector) => + Assign(a => a.Order = selector?.Invoke(new TermsOrderDescriptor())?.Value); public TermsAggregationDescriptor Include(long partition, long numberOfPartitions) => Assign(a => a.Include = new TermsInclude(partition, numberOfPartitions)); diff --git a/src/Nest/Aggregations/Bucket/Terms/TermsOrder.cs b/src/Nest/Aggregations/Bucket/Terms/TermsOrder.cs index 410c611ea40..b7d77b6c66d 100644 --- a/src/Nest/Aggregations/Bucket/Terms/TermsOrder.cs +++ b/src/Nest/Aggregations/Bucket/Terms/TermsOrder.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using System; +using Newtonsoft.Json; namespace Nest { @@ -10,11 +11,10 @@ public class TermsOrder public static TermsOrder CountAscending => new TermsOrder { Key = "_count", Order = SortOrder.Ascending }; public static TermsOrder CountDescending => new TermsOrder { Key = "_count", Order = SortOrder.Descending }; - - //here for backwards compatibility reasons, elasticsearch deprecrated _term as sort order in favor of _key + [Obsolete("Deprecated in Elasticsearch 6.0. Use KeyAscending")] public static TermsOrder TermAscending => new TermsOrder { Key = "_key", Order = SortOrder.Ascending }; + [Obsolete("Deprecated in Elasticsearch 6.0. Use KeyDescending")] public static TermsOrder TermDescending => new TermsOrder { Key = "_key", Order = SortOrder.Descending }; - public static TermsOrder KeyAscending => new TermsOrder { Key = "_key", Order = SortOrder.Ascending }; public static TermsOrder KeyDescending => new TermsOrder { Key = "_key", Order = SortOrder.Descending }; } diff --git a/src/Nest/Aggregations/Bucket/Terms/TermsOrderDescriptor.cs b/src/Nest/Aggregations/Bucket/Terms/TermsOrderDescriptor.cs new file mode 100644 index 00000000000..e00d5e34bc3 --- /dev/null +++ b/src/Nest/Aggregations/Bucket/Terms/TermsOrderDescriptor.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace Nest +{ + public class TermsOrderDescriptor : DescriptorPromiseBase, IList> + where T : class + { + public TermsOrderDescriptor() : base(new List()) { } + + public TermsOrderDescriptor CountAscending() => Assign(a => a.Add(TermsOrder.CountAscending)); + + public TermsOrderDescriptor CountDescending() => Assign(a => a.Add(TermsOrder.CountDescending)); + + public TermsOrderDescriptor KeyAscending() => Assign(a => a.Add(TermsOrder.KeyAscending)); + + public TermsOrderDescriptor KeyDescending() => Assign(a => a.Add(TermsOrder.KeyDescending)); + + public TermsOrderDescriptor Ascending(string key) => + string.IsNullOrWhiteSpace(key) ? this : Assign(a => a.Add(new TermsOrder { Key = key, Order = SortOrder.Ascending })); + + public TermsOrderDescriptor Descending(string key) => + string.IsNullOrWhiteSpace(key) ? this : Assign(a => a.Add(new TermsOrder { Key = key, Order = SortOrder.Descending })); + } +} diff --git a/src/Tests/Aggregations/Bucket/Terms/TermsAggregationUsageTests.cs b/src/Tests/Aggregations/Bucket/Terms/TermsAggregationUsageTests.cs index 1106e326152..a06dde0d26d 100644 --- a/src/Tests/Aggregations/Bucket/Terms/TermsAggregationUsageTests.cs +++ b/src/Tests/Aggregations/Bucket/Terms/TermsAggregationUsageTests.cs @@ -64,8 +64,10 @@ public TermsAggregationUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base .ExecutionHint(TermsAggregationExecutionHint.Map) .Missing("n/a") .Script(ss => ss.Source("'State of Being: '+_value")) - .Order(TermsOrder.TermAscending) - .Order(TermsOrder.CountDescending) + .Order(o => o + .KeyAscending() + .CountDescending() + ) .Meta(m => m .Add("foo", "bar") ) @@ -87,7 +89,7 @@ public TermsAggregationUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base Script = new InlineScript("'State of Being: '+_value"), Order = new List { - TermsOrder.TermAscending, + TermsOrder.KeyAscending, TermsOrder.CountDescending }, Meta = new Dictionary @@ -171,8 +173,10 @@ public TermsAggregationIncludePatternUsageTests(ReadOnlyCluster i, EndpointUsage .ExecutionHint(TermsAggregationExecutionHint.Map) .Missing("n/a") .Include("(Stable|VeryActive)") - .Order(TermsOrder.TermAscending) - .Order(TermsOrder.CountDescending) + .Order(o => o + .KeyAscending() + .CountDescending() + ) .Meta(m => m .Add("foo", "bar") ) @@ -194,7 +198,7 @@ public TermsAggregationIncludePatternUsageTests(ReadOnlyCluster i, EndpointUsage Include = new TermsInclude("(Stable|VeryActive)"), Order = new List { - TermsOrder.TermAscending, + TermsOrder.KeyAscending, TermsOrder.CountDescending }, Meta = new Dictionary @@ -278,8 +282,10 @@ public TermsAggregationIncludeExactValuesUsageTests(ReadOnlyCluster i, EndpointU .ExecutionHint(TermsAggregationExecutionHint.Map) .Missing("n/a") .Include(new[] {StateOfBeing.Stable.ToString(), StateOfBeing.VeryActive.ToString()}) - .Order(TermsOrder.TermAscending) - .Order(TermsOrder.CountDescending) + .Order(o => o + .KeyAscending() + .CountDescending() + ) .Meta(m => m .Add("foo", "bar") ) @@ -301,7 +307,7 @@ public TermsAggregationIncludeExactValuesUsageTests(ReadOnlyCluster i, EndpointU Include = new TermsInclude(new[] { StateOfBeing.Stable.ToString(), StateOfBeing.VeryActive.ToString() }), Order = new List { - TermsOrder.TermAscending, + TermsOrder.KeyAscending, TermsOrder.CountDescending }, Meta = new Dictionary