From 2f553e80150df3d5fa1bfa0865d1d27d2d437d07 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Thu, 26 Apr 2018 18:14:35 +1000 Subject: [PATCH 1/2] Add support for ip_range datatype (Backport of #3202 to 6.x) This commit adds support for the ip_range datatype. The existing IpRange type used for IpRangeAggregation renamed to IpRangeAggregationRange to allow for the introduction of an IpRange type whose name aligns with other range datatypes. --- src/Nest/CommonOptions/Range/Ranges.cs | 14 ++++ .../Mapping/DynamicTemplate/SingleMapping.cs | 5 ++ .../Core/Range/Ip/IpAddressRangeAttribute.cs | 10 +++ .../Core/Range/Ip/IpAddressRangeProperty.cs | 21 ++++++ .../Types/Core/Range/RangePropertyBase.cs | 6 +- .../Mapping/Types/Core/Range/RangeType.cs | 8 +- src/Nest/Mapping/Types/FieldType.cs | 2 + src/Nest/Mapping/Types/Properties-Scalar.cs | 3 + src/Nest/Mapping/Types/Properties.cs | 3 + .../Mapping/Types/PropertiesJsonConverter.cs | 8 +- .../Mapping/Types/PropertyJsonConverter.cs | 12 +-- src/Nest/Mapping/Visitor/PropertyWalker.cs | 3 + src/Tests/Framework/MockData/Ranges.cs | 24 ++++++ .../PutMapping/PutMappingApiTest.cs | 4 +- .../IpRange/IpAddressRangeAttributeTests.cs | 26 +++++++ .../IpRange/IpAddressRangePropertyTests.cs | 73 +++++++++++++++++++ 16 files changed, 203 insertions(+), 19 deletions(-) create mode 100644 src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs create mode 100644 src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs create mode 100644 src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs create mode 100644 src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs diff --git a/src/Nest/CommonOptions/Range/Ranges.cs b/src/Nest/CommonOptions/Range/Ranges.cs index e820dd05c70..d44d4edfad2 100644 --- a/src/Nest/CommonOptions/Range/Ranges.cs +++ b/src/Nest/CommonOptions/Range/Ranges.cs @@ -73,4 +73,18 @@ public class LongRange [JsonProperty("lt")] public long? LessThan { get; set; } } + public class IpAddressRange + { + [JsonProperty("gte")] + public string GreaterThanOrEqualTo { get; set; } + + [JsonProperty("lte")] + public string LessThanOrEqualTo { get; set; } + + [JsonProperty("gt")] + public string GreaterThan { get; set; } + + [JsonProperty("lt")] + public string LessThan { get; set; } + } } diff --git a/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs b/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs index 2e99c2f8541..a089c723b63 100644 --- a/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs +++ b/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs @@ -73,6 +73,9 @@ public IProperty IntegerRange(Func, IIntegerRa public IProperty LongRange(Func, ILongRangeProperty> selector) => selector?.Invoke(new LongRangePropertyDescriptor()); + public IProperty IpRange(Func, IIpAddressRangeProperty> selector) => + selector?.Invoke(new IpAddressRangePropertyDescriptor()); + public IProperty Join(Func, IJoinProperty> selector) => selector?.Invoke(new JoinPropertyDescriptor()); @@ -239,6 +242,8 @@ public IProperty Scalar(Expression> field, Func().Name(field)); public IProperty Scalar(Expression> field, Func, IFloatRangeProperty> selector = null) => selector.InvokeOrDefault(new FloatRangePropertyDescriptor().Name(field)); + public IProperty Scalar(Expression> field, Func, IIpAddressRangeProperty> selector = null) => + selector.InvokeOrDefault(new IpAddressRangePropertyDescriptor().Name(field)); #pragma warning restore CS3001 // Argument type is not CLS-compliant } } diff --git a/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs new file mode 100644 index 00000000000..fd197be3741 --- /dev/null +++ b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs @@ -0,0 +1,10 @@ +using System; +using Elasticsearch.Net; + +namespace Nest +{ + public class IpAddressRangeAttribute : RangePropertyAttributeBase, IIpAddressRangeProperty + { + public IpAddressRangeAttribute() : base(RangeType.IpRange) { } + } +} diff --git a/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs new file mode 100644 index 00000000000..bf4fa27a1d9 --- /dev/null +++ b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs @@ -0,0 +1,21 @@ +using System; +using Elasticsearch.Net; +using Newtonsoft.Json; + +namespace Nest +{ + [JsonObject(MemberSerialization.OptIn)] + public interface IIpAddressRangeProperty : IRangeProperty { } + + public class IpAddressRangeProperty : RangePropertyBase, IIpAddressRangeProperty + { + public IpAddressRangeProperty() : base(RangeType.IpRange) { } + } + + public class IpAddressRangePropertyDescriptor + : RangePropertyDescriptorBase, IIpAddressRangeProperty, T>, IIpAddressRangeProperty + where T : class + { + public IpAddressRangePropertyDescriptor() : base(RangeType.IpRange) { } + } +} diff --git a/src/Nest/Mapping/Types/Core/Range/RangePropertyBase.cs b/src/Nest/Mapping/Types/Core/Range/RangePropertyBase.cs index 83897689ff2..33753fe88f8 100644 --- a/src/Nest/Mapping/Types/Core/Range/RangePropertyBase.cs +++ b/src/Nest/Mapping/Types/Core/Range/RangePropertyBase.cs @@ -49,11 +49,11 @@ public abstract class RangePropertyDescriptorBase protected RangePropertyDescriptorBase(RangeType type) : base(type.ToFieldType()) { } - /// + /// public TDescriptor Coerce(bool? coerce = true) => Assign(a => a.Coerce = coerce); - /// + /// public TDescriptor Boost(double? boost) => Assign(a => a.Boost = boost); - /// + /// public TDescriptor Index(bool? index = true) => Assign(a => a.Index = index); } } diff --git a/src/Nest/Mapping/Types/Core/Range/RangeType.cs b/src/Nest/Mapping/Types/Core/Range/RangeType.cs index be354793c22..a83d49f48d2 100644 --- a/src/Nest/Mapping/Types/Core/Range/RangeType.cs +++ b/src/Nest/Mapping/Types/Core/Range/RangeType.cs @@ -32,7 +32,12 @@ public enum RangeType /// A range of date values represented as unsigned 64-bit integer milliseconds elapsed since system epoch. /// [EnumMember(Value = "date_range")] - DateRange + DateRange, + /// + /// A range of ip values supporting either IPv4 or IPv6 (or mixed) addresses. + /// + [EnumMember(Value = "ip_range")] + IpRange } internal static class RangeTypeExtensions { @@ -45,6 +50,7 @@ public static FieldType ToFieldType(this RangeType rangeType) case RangeType.LongRange: return FieldType.LongRange; case RangeType.DoubleRange: return FieldType.DoubleRange; case RangeType.DateRange: return FieldType.DateRange; + case RangeType.IpRange: return FieldType.IpRange; default: throw new ArgumentOutOfRangeException(nameof(rangeType), rangeType, null); } diff --git a/src/Nest/Mapping/Types/FieldType.cs b/src/Nest/Mapping/Types/FieldType.cs index 0df93761c8a..fb3d451eaef 100644 --- a/src/Nest/Mapping/Types/FieldType.cs +++ b/src/Nest/Mapping/Types/FieldType.cs @@ -84,6 +84,8 @@ public enum FieldType DoubleRange, [EnumMember(Value = "date_range")] DateRange, + [EnumMember(Value = "ip_range")] + IpRange, [EnumMember(Value = "join")] Join, } diff --git a/src/Nest/Mapping/Types/Properties-Scalar.cs b/src/Nest/Mapping/Types/Properties-Scalar.cs index f4868727b0d..0492b5d43a9 100644 --- a/src/Nest/Mapping/Types/Properties-Scalar.cs +++ b/src/Nest/Mapping/Types/Properties-Scalar.cs @@ -100,6 +100,7 @@ public partial interface IPropertiesDescriptor TReturnType Scalar(Expression> field, Func, ILongRangeProperty> selector = null); TReturnType Scalar(Expression> field, Func, IIntegerRangeProperty> selector = null); TReturnType Scalar(Expression> field, Func, IFloatRangeProperty> selector = null); + TReturnType Scalar(Expression> field, Func, IIpAddressRangeProperty> selector = null); #pragma warning restore CS3001 // Argument type is not CLS-compliant } @@ -269,6 +270,8 @@ public PropertiesDescriptor Scalar(Expression> field, F SetProperty(selector.InvokeOrDefault(new IntegerRangePropertyDescriptor().Name(field))); public PropertiesDescriptor Scalar(Expression> field, Func, IFloatRangeProperty> selector = null) => SetProperty(selector.InvokeOrDefault(new FloatRangePropertyDescriptor().Name(field))); + public PropertiesDescriptor Scalar(Expression> field, Func, IIpAddressRangeProperty> selector = null) => + SetProperty(selector.InvokeOrDefault(new IpAddressRangePropertyDescriptor().Name(field))); #pragma warning restore CS3001 // Argument type is not CLS-compliant } diff --git a/src/Nest/Mapping/Types/Properties.cs b/src/Nest/Mapping/Types/Properties.cs index 7bf08b41fc3..994c66a1295 100644 --- a/src/Nest/Mapping/Types/Properties.cs +++ b/src/Nest/Mapping/Types/Properties.cs @@ -72,6 +72,7 @@ TReturnType Nested(Func, INestedProp TReturnType FloatRange(Func, IFloatRangeProperty> selector); TReturnType IntegerRange(Func, IIntegerRangeProperty> selector); TReturnType LongRange(Func, ILongRangeProperty> selector); + TReturnType IpRange(Func, IIpAddressRangeProperty> selector); TReturnType Join(Func, IJoinProperty> selector); } @@ -127,6 +128,8 @@ public PropertiesDescriptor Nested(Func LongRange(Func, ILongRangeProperty> selector) => SetProperty(selector); + public PropertiesDescriptor IpRange(Func, IIpAddressRangeProperty> selector) => SetProperty(selector); + public PropertiesDescriptor Join(Func, IJoinProperty> selector) => SetProperty(selector); public PropertiesDescriptor Custom(IProperty customType) => SetProperty(customType); diff --git a/src/Nest/Mapping/Types/PropertiesJsonConverter.cs b/src/Nest/Mapping/Types/PropertiesJsonConverter.cs index ed8efa2703e..0ce2fed83b8 100644 --- a/src/Nest/Mapping/Types/PropertiesJsonConverter.cs +++ b/src/Nest/Mapping/Types/PropertiesJsonConverter.cs @@ -54,14 +54,10 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist foreach (var p in o.Properties()) { var name = p.Name; - var po = p.First as JObject; - if (po == null) continue; - - var mapping = _elasticTypeConverter.ReadJson(po.CreateReader(), objectType, existingValue, serializer) as IProperty; - if (mapping == null) continue; + if (!(p.First is JObject po)) continue; + if (!(_elasticTypeConverter.ReadJson(po.CreateReader(), objectType, existingValue, serializer) is IProperty mapping)) continue; mapping.Name = name; - r.Add(name, mapping); } return r; diff --git a/src/Nest/Mapping/Types/PropertyJsonConverter.cs b/src/Nest/Mapping/Types/PropertyJsonConverter.cs index 8053fa2ddf8..90e1b692368 100644 --- a/src/Nest/Mapping/Types/PropertyJsonConverter.cs +++ b/src/Nest/Mapping/Types/PropertyJsonConverter.cs @@ -11,16 +11,11 @@ internal class PropertyJsonConverter : JsonConverter public override bool CanConvert(Type objectType) => objectType == typeof(IProperty); - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) => throw new NotSupportedException(); - } - private TProperty ReadProperty(JObject j, JsonSerializer s) - where TProperty : IProperty - { - return FromJson.ReadAs(j.CreateReader(), s); - } + private TProperty ReadProperty(JObject j, JsonSerializer s) where TProperty : IProperty => + FromJson.ReadAs(j.CreateReader(), s); public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { @@ -64,6 +59,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist case FieldType.FloatRange: return ReadProperty(jObject, serializer); case FieldType.IntegerRange: return ReadProperty(jObject, serializer); case FieldType.LongRange: return ReadProperty(jObject, serializer); + case FieldType.IpRange: return ReadProperty(jObject, serializer); case FieldType.Join: return ReadProperty(jObject, serializer); case FieldType.None: break; diff --git a/src/Nest/Mapping/Visitor/PropertyWalker.cs b/src/Nest/Mapping/Visitor/PropertyWalker.cs index a17eff8ec02..6c475546660 100644 --- a/src/Nest/Mapping/Visitor/PropertyWalker.cs +++ b/src/Nest/Mapping/Visitor/PropertyWalker.cs @@ -155,6 +155,9 @@ private static IProperty InferProperty(PropertyInfo propertyInfo) if (type == typeof(LongRange)) return new LongRangeProperty(); + if (type == typeof(IpAddressRange)) + return new IpAddressRangeProperty(); + return new ObjectProperty(); } diff --git a/src/Tests/Framework/MockData/Ranges.cs b/src/Tests/Framework/MockData/Ranges.cs index 57e2858fdba..528d44ae16b 100644 --- a/src/Tests/Framework/MockData/Ranges.cs +++ b/src/Tests/Framework/MockData/Ranges.cs @@ -1,4 +1,5 @@ using System; +using System.Net; using Bogus; using Nest; @@ -11,6 +12,7 @@ public class Ranges public FloatRange Floats { get; set; } public IntegerRange Integers { get; set; } public LongRange Longs { get; set; } + public IpAddressRange Ips { get; set; } //for deserialization public Ranges() { } @@ -23,6 +25,7 @@ private Ranges(Faker faker) SetFloats(faker, r); SetIntegers(faker, r); SetLongs(faker, r); + SetIps(faker, r); } private void SetDates(Faker faker, Func r) @@ -70,6 +73,27 @@ private void SetLongs(Faker faker, Func r) SwapAssign(r(), high, v => d.LessThan = v, v => d.LessThanOrEqualTo = v); this.Longs = d; } + private void SetIps(Faker faker, Func r) + { + var low = faker.Internet.Ip(); + var high = faker.Internet.Ip(); + var lowBytes = IPAddress.Parse(low).GetAddressBytes(); + var highBytes = IPAddress.Parse(high).GetAddressBytes(); + for (int i = 0; i < lowBytes.Length; i++) + { + if (lowBytes[i] > highBytes[i]) + { + var s = low; + low = high; + high = s; + break; + } + } + var d = new IpAddressRange(); + SwapAssign(r(), low, v => d.GreaterThan = v, v => d.GreaterThanOrEqualTo = v); + SwapAssign(r(), high, v => d.LessThan = v, v => d.LessThanOrEqualTo = v); + this.Ips = d; + } private static void SwapAssign(bool b, T value, Action first, Action second) { diff --git a/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs b/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs index efe43b95717..bb379db5b89 100644 --- a/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs +++ b/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs @@ -111,7 +111,8 @@ protected override LazyResponses ClientUsage() => Calls( doubles = new { type = "double_range" }, floats = new { type = "float_range" }, integers = new { type = "integer_range" }, - longs = new { type = "long_range" } + longs = new { type = "long_range" }, + ips = new { type = "ip_range" } }, type = "object" }, @@ -274,6 +275,7 @@ protected override LazyResponses ClientUsage() => Calls( {p => p.Floats, new FloatRangeProperty()}, {p => p.Integers, new IntegerRangeProperty()}, {p => p.Longs, new LongRangeProperty()}, + {p => p.Ips, new IpAddressRangeProperty()}, } } }, diff --git a/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs b/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs new file mode 100644 index 00000000000..4fbf321901a --- /dev/null +++ b/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs @@ -0,0 +1,26 @@ +using Nest; +using Tests.Framework; + +namespace Tests.Mapping.Types.Core.Range.IpRange +{ + public class IpAddressRangeTest + { + [IpAddressRange] + public Nest.IpAddressRange Range { get; set; } + } + + [SkipVersion("<5.5.0", "ip range type is a new 5.5.0 feature")] + public class IpAddressRangeAttributeTests : AttributeTestsBase + { + protected override object ExpectJson => new + { + properties = new + { + range = new + { + type = "ip_range" + } + } + }; + } +} diff --git a/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs b/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs new file mode 100644 index 00000000000..7071ead8896 --- /dev/null +++ b/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs @@ -0,0 +1,73 @@ +using System; +using Nest; +using Tests.Framework; +using Tests.Framework.Integration; +using Tests.Framework.ManagedElasticsearch.Clusters; +using Tests.Framework.MockData; + +namespace Tests.Mapping.Types.Core.Range.IpRange +{ + [SkipVersion("<5.5.0", "ip range type is a new 5.5.0 feature")] + public class IpAddressRangePropertyTests : PropertyTestsBase + { + public IpAddressRangePropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + + protected override object ExpectJson => new + { + properties = new + { + ranges = new + { + type = "object", + properties = new + { + ips = new + { + type = "ip_range", + store = true, + index = false, + boost = 1.5, + coerce = true + } + } + } + } + }; + + protected override Func, IPromise> FluentProperties => f => f + .Object(m => m + .Name(p => p.Ranges) + .Properties(props => props + .IpRange(n => n + .Name(p => p.Ips) + .Store() + .Index(false) + .Boost(1.5) + .Coerce() + ) + ) + ); + + + protected override IProperties InitializerProperties => new Properties + { + { + "ranges", new ObjectProperty + { + Properties = new Properties + { + { + "ips", new IpAddressRangeProperty + { + Store = true, + Index = false, + Boost = 1.5, + Coerce = true + } + } + } + } + } + }; + } +} From af6c3589d0e6d83f903689cc78be2442e23e2142 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Fri, 27 Apr 2018 11:57:08 +1000 Subject: [PATCH 2/2] The rename back to IpRange --- src/Nest/Mapping/DynamicTemplate/SingleMapping.cs | 8 ++++---- .../Types/Core/Range/Ip/IpAddressRangeAttribute.cs | 10 ---------- .../Types/Core/Range/Ip/IpAddressRangeProperty.cs | 12 ++++++------ .../Mapping/Types/Core/Range/Ip/IpRangeAttribute.cs | 10 ++++++++++ src/Nest/Mapping/Types/Properties-Scalar.cs | 6 +++--- src/Nest/Mapping/Types/Properties.cs | 4 ++-- src/Nest/Mapping/Types/PropertyJsonConverter.cs | 2 +- src/Nest/Mapping/Visitor/PropertyWalker.cs | 2 +- .../PutMapping/PutMappingApiTest.cs | 2 +- ...ngeAttributeTests.cs => IpRangeAttributeTests.cs} | 6 +++--- ...RangePropertyTests.cs => IpRangePropertyTests.cs} | 6 +++--- 11 files changed, 34 insertions(+), 34 deletions(-) delete mode 100644 src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs create mode 100644 src/Nest/Mapping/Types/Core/Range/Ip/IpRangeAttribute.cs rename src/Tests/Mapping/Types/Core/Range/IpRange/{IpAddressRangeAttributeTests.cs => IpRangeAttributeTests.cs} (72%) rename src/Tests/Mapping/Types/Core/Range/IpRange/{IpAddressRangePropertyTests.cs => IpRangePropertyTests.cs} (85%) diff --git a/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs b/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs index a089c723b63..996c9f18077 100644 --- a/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs +++ b/src/Nest/Mapping/DynamicTemplate/SingleMapping.cs @@ -73,8 +73,8 @@ public IProperty IntegerRange(Func, IIntegerRa public IProperty LongRange(Func, ILongRangeProperty> selector) => selector?.Invoke(new LongRangePropertyDescriptor()); - public IProperty IpRange(Func, IIpAddressRangeProperty> selector) => - selector?.Invoke(new IpAddressRangePropertyDescriptor()); + public IProperty IpRange(Func, IIpRangeProperty> selector) => + selector?.Invoke(new IpRangePropertyDescriptor()); public IProperty Join(Func, IJoinProperty> selector) => selector?.Invoke(new JoinPropertyDescriptor()); @@ -242,8 +242,8 @@ public IProperty Scalar(Expression> field, Func().Name(field)); public IProperty Scalar(Expression> field, Func, IFloatRangeProperty> selector = null) => selector.InvokeOrDefault(new FloatRangePropertyDescriptor().Name(field)); - public IProperty Scalar(Expression> field, Func, IIpAddressRangeProperty> selector = null) => - selector.InvokeOrDefault(new IpAddressRangePropertyDescriptor().Name(field)); + public IProperty Scalar(Expression> field, Func, IIpRangeProperty> selector = null) => + selector.InvokeOrDefault(new IpRangePropertyDescriptor().Name(field)); #pragma warning restore CS3001 // Argument type is not CLS-compliant } } diff --git a/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs deleted file mode 100644 index fd197be3741..00000000000 --- a/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using Elasticsearch.Net; - -namespace Nest -{ - public class IpAddressRangeAttribute : RangePropertyAttributeBase, IIpAddressRangeProperty - { - public IpAddressRangeAttribute() : base(RangeType.IpRange) { } - } -} diff --git a/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs index bf4fa27a1d9..58cd7d286f4 100644 --- a/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs +++ b/src/Nest/Mapping/Types/Core/Range/Ip/IpAddressRangeProperty.cs @@ -5,17 +5,17 @@ namespace Nest { [JsonObject(MemberSerialization.OptIn)] - public interface IIpAddressRangeProperty : IRangeProperty { } + public interface IIpRangeProperty : IRangeProperty { } - public class IpAddressRangeProperty : RangePropertyBase, IIpAddressRangeProperty + public class IpRangeProperty : RangePropertyBase, IIpRangeProperty { - public IpAddressRangeProperty() : base(RangeType.IpRange) { } + public IpRangeProperty() : base(RangeType.IpRange) { } } - public class IpAddressRangePropertyDescriptor - : RangePropertyDescriptorBase, IIpAddressRangeProperty, T>, IIpAddressRangeProperty + public class IpRangePropertyDescriptor + : RangePropertyDescriptorBase, IIpRangeProperty, T>, IIpRangeProperty where T : class { - public IpAddressRangePropertyDescriptor() : base(RangeType.IpRange) { } + public IpRangePropertyDescriptor() : base(RangeType.IpRange) { } } } diff --git a/src/Nest/Mapping/Types/Core/Range/Ip/IpRangeAttribute.cs b/src/Nest/Mapping/Types/Core/Range/Ip/IpRangeAttribute.cs new file mode 100644 index 00000000000..b7c5fd9a824 --- /dev/null +++ b/src/Nest/Mapping/Types/Core/Range/Ip/IpRangeAttribute.cs @@ -0,0 +1,10 @@ +using System; +using Elasticsearch.Net; + +namespace Nest +{ + public class IpRangeAttribute : RangePropertyAttributeBase, IIpRangeProperty + { + public IpRangeAttribute() : base(RangeType.IpRange) { } + } +} diff --git a/src/Nest/Mapping/Types/Properties-Scalar.cs b/src/Nest/Mapping/Types/Properties-Scalar.cs index 0492b5d43a9..453282dafec 100644 --- a/src/Nest/Mapping/Types/Properties-Scalar.cs +++ b/src/Nest/Mapping/Types/Properties-Scalar.cs @@ -100,7 +100,7 @@ public partial interface IPropertiesDescriptor TReturnType Scalar(Expression> field, Func, ILongRangeProperty> selector = null); TReturnType Scalar(Expression> field, Func, IIntegerRangeProperty> selector = null); TReturnType Scalar(Expression> field, Func, IFloatRangeProperty> selector = null); - TReturnType Scalar(Expression> field, Func, IIpAddressRangeProperty> selector = null); + TReturnType Scalar(Expression> field, Func, IIpRangeProperty> selector = null); #pragma warning restore CS3001 // Argument type is not CLS-compliant } @@ -270,8 +270,8 @@ public PropertiesDescriptor Scalar(Expression> field, F SetProperty(selector.InvokeOrDefault(new IntegerRangePropertyDescriptor().Name(field))); public PropertiesDescriptor Scalar(Expression> field, Func, IFloatRangeProperty> selector = null) => SetProperty(selector.InvokeOrDefault(new FloatRangePropertyDescriptor().Name(field))); - public PropertiesDescriptor Scalar(Expression> field, Func, IIpAddressRangeProperty> selector = null) => - SetProperty(selector.InvokeOrDefault(new IpAddressRangePropertyDescriptor().Name(field))); + public PropertiesDescriptor Scalar(Expression> field, Func, IIpRangeProperty> selector = null) => + SetProperty(selector.InvokeOrDefault(new IpRangePropertyDescriptor().Name(field))); #pragma warning restore CS3001 // Argument type is not CLS-compliant } diff --git a/src/Nest/Mapping/Types/Properties.cs b/src/Nest/Mapping/Types/Properties.cs index 994c66a1295..4cd602cb256 100644 --- a/src/Nest/Mapping/Types/Properties.cs +++ b/src/Nest/Mapping/Types/Properties.cs @@ -72,7 +72,7 @@ TReturnType Nested(Func, INestedProp TReturnType FloatRange(Func, IFloatRangeProperty> selector); TReturnType IntegerRange(Func, IIntegerRangeProperty> selector); TReturnType LongRange(Func, ILongRangeProperty> selector); - TReturnType IpRange(Func, IIpAddressRangeProperty> selector); + TReturnType IpRange(Func, IIpRangeProperty> selector); TReturnType Join(Func, IJoinProperty> selector); } @@ -128,7 +128,7 @@ public PropertiesDescriptor Nested(Func LongRange(Func, ILongRangeProperty> selector) => SetProperty(selector); - public PropertiesDescriptor IpRange(Func, IIpAddressRangeProperty> selector) => SetProperty(selector); + public PropertiesDescriptor IpRange(Func, IIpRangeProperty> selector) => SetProperty(selector); public PropertiesDescriptor Join(Func, IJoinProperty> selector) => SetProperty(selector); diff --git a/src/Nest/Mapping/Types/PropertyJsonConverter.cs b/src/Nest/Mapping/Types/PropertyJsonConverter.cs index 90e1b692368..816e710110c 100644 --- a/src/Nest/Mapping/Types/PropertyJsonConverter.cs +++ b/src/Nest/Mapping/Types/PropertyJsonConverter.cs @@ -59,7 +59,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist case FieldType.FloatRange: return ReadProperty(jObject, serializer); case FieldType.IntegerRange: return ReadProperty(jObject, serializer); case FieldType.LongRange: return ReadProperty(jObject, serializer); - case FieldType.IpRange: return ReadProperty(jObject, serializer); + case FieldType.IpRange: return ReadProperty(jObject, serializer); case FieldType.Join: return ReadProperty(jObject, serializer); case FieldType.None: break; diff --git a/src/Nest/Mapping/Visitor/PropertyWalker.cs b/src/Nest/Mapping/Visitor/PropertyWalker.cs index 6c475546660..d972470d834 100644 --- a/src/Nest/Mapping/Visitor/PropertyWalker.cs +++ b/src/Nest/Mapping/Visitor/PropertyWalker.cs @@ -156,7 +156,7 @@ private static IProperty InferProperty(PropertyInfo propertyInfo) return new LongRangeProperty(); if (type == typeof(IpAddressRange)) - return new IpAddressRangeProperty(); + return new IpRangeProperty(); return new ObjectProperty(); } diff --git a/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs b/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs index bb379db5b89..009fa0e7f85 100644 --- a/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs +++ b/src/Tests/Indices/MappingManagement/PutMapping/PutMappingApiTest.cs @@ -275,7 +275,7 @@ protected override LazyResponses ClientUsage() => Calls( {p => p.Floats, new FloatRangeProperty()}, {p => p.Integers, new IntegerRangeProperty()}, {p => p.Longs, new LongRangeProperty()}, - {p => p.Ips, new IpAddressRangeProperty()}, + {p => p.Ips, new IpRangeProperty()}, } } }, diff --git a/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs b/src/Tests/Mapping/Types/Core/Range/IpRange/IpRangeAttributeTests.cs similarity index 72% rename from src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs rename to src/Tests/Mapping/Types/Core/Range/IpRange/IpRangeAttributeTests.cs index 4fbf321901a..3f10cf2f037 100644 --- a/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangeAttributeTests.cs +++ b/src/Tests/Mapping/Types/Core/Range/IpRange/IpRangeAttributeTests.cs @@ -3,14 +3,14 @@ namespace Tests.Mapping.Types.Core.Range.IpRange { - public class IpAddressRangeTest + public class IpRangeTest { - [IpAddressRange] + [IpRange] public Nest.IpAddressRange Range { get; set; } } [SkipVersion("<5.5.0", "ip range type is a new 5.5.0 feature")] - public class IpAddressRangeAttributeTests : AttributeTestsBase + public class IpRangeAttributeTests : AttributeTestsBase { protected override object ExpectJson => new { diff --git a/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs b/src/Tests/Mapping/Types/Core/Range/IpRange/IpRangePropertyTests.cs similarity index 85% rename from src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs rename to src/Tests/Mapping/Types/Core/Range/IpRange/IpRangePropertyTests.cs index 7071ead8896..4a71de9515d 100644 --- a/src/Tests/Mapping/Types/Core/Range/IpRange/IpAddressRangePropertyTests.cs +++ b/src/Tests/Mapping/Types/Core/Range/IpRange/IpRangePropertyTests.cs @@ -8,9 +8,9 @@ namespace Tests.Mapping.Types.Core.Range.IpRange { [SkipVersion("<5.5.0", "ip range type is a new 5.5.0 feature")] - public class IpAddressRangePropertyTests : PropertyTestsBase + public class IpRangePropertyTests : PropertyTestsBase { - public IpAddressRangePropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + public IpRangePropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { } protected override object ExpectJson => new { @@ -57,7 +57,7 @@ public IpAddressRangePropertyTests(WritableCluster cluster, EndpointUsage usage) Properties = new Properties { { - "ips", new IpAddressRangeProperty + "ips", new IpRangeProperty { Store = true, Index = false,