diff --git a/src/Nest/Mapping/Types/Core/Number/NumberType.cs b/src/Nest/Mapping/Types/Core/Number/NumberType.cs index da8ae44c341..fdc5e5b5be6 100644 --- a/src/Nest/Mapping/Types/Core/Number/NumberType.cs +++ b/src/Nest/Mapping/Types/Core/Number/NumberType.cs @@ -34,7 +34,10 @@ public enum NumberType Short, [EnumMember(Value = "byte")] - Byte + Byte, + + [EnumMember(Value = "unsigned_long")] + UnsignedLong } internal static class NumberTypeExtensions @@ -51,6 +54,7 @@ public static FieldType ToFieldType(this NumberType numberType) case NumberType.Long: return FieldType.Long; case NumberType.Short: return FieldType.Short; case NumberType.Byte: return FieldType.Byte; + case NumberType.UnsignedLong: return FieldType.UnsignedLong; default: throw new ArgumentOutOfRangeException(nameof(numberType), numberType, null); } diff --git a/src/Nest/Mapping/Types/FieldType.cs b/src/Nest/Mapping/Types/FieldType.cs index 16db2bdce5c..841e42a4478 100644 --- a/src/Nest/Mapping/Types/FieldType.cs +++ b/src/Nest/Mapping/Types/FieldType.cs @@ -89,6 +89,9 @@ public enum FieldType [EnumMember(Value = "long")] Long, + [EnumMember(Value = "unsigned_long")] + UnsignedLong, + [EnumMember(Value = "short")] Short, diff --git a/src/Nest/Mapping/Types/PropertyFormatter.cs b/src/Nest/Mapping/Types/PropertyFormatter.cs index 70e7de9e106..38c48918fcd 100644 --- a/src/Nest/Mapping/Types/PropertyFormatter.cs +++ b/src/Nest/Mapping/Types/PropertyFormatter.cs @@ -68,6 +68,7 @@ public IProperty Deserialize(ref JsonReader reader, IJsonFormatterResolver forma case FieldType.Long: case FieldType.ScaledFloat: case FieldType.HalfFloat: + case FieldType.UnsignedLong: var numberProperty = Deserialize(ref segmentReader, formatterResolver); ((IProperty)numberProperty).Type = typeString; return numberProperty; diff --git a/tests/Tests/Mapping/Types/Core/Number/NumberPropertyTests.cs b/tests/Tests/Mapping/Types/Core/Number/NumberPropertyTests.cs index 02c2de13052..9fd71acc8e6 100644 --- a/tests/Tests/Mapping/Types/Core/Number/NumberPropertyTests.cs +++ b/tests/Tests/Mapping/Types/Core/Number/NumberPropertyTests.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information using System; +using Elastic.Elasticsearch.Xunit.XunitPlumbing; using Nest; using Tests.Core.ManagedElasticsearch.Clusters; using Tests.Domain; @@ -118,4 +119,51 @@ public ScaledFloatNumberPropertyTests(WritableCluster cluster, EndpointUsage usa } }; } + + [SkipVersion("<7.10.0", "Introduced in 7.10.0")] + public class UnsignedLongNumberPropertyTests : PropertyTestsBase + { + public UnsignedLongNumberPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + + protected override object ExpectJson => new + { + properties = new + { + numberOfCommits = new + { + type = "unsigned_long", + doc_values = true, + similarity = "BM25", + store = true, + index = false, + ignore_malformed = true + } + } + }; + + protected override Func, IPromise> FluentProperties => f => f + .Number(n => n + .Name(p => p.NumberOfCommits) + .Type(NumberType.UnsignedLong) + .DocValues() + .Similarity("BM25") + .Store() + .Index(false) + .IgnoreMalformed() + ); + + protected override IProperties InitializerProperties => new Properties + { + { + "numberOfCommits", new NumberProperty(NumberType.UnsignedLong) + { + DocValues = true, + Similarity = "BM25", + Store = true, + Index = false, + IgnoreMalformed = true + } + } + }; + } }