From 980e6d514631b5da6b172ee2739846c0d88d88de Mon Sep 17 00:00:00 2001 From: Mpdreamz Date: Sun, 12 Aug 2018 18:10:41 +0200 Subject: [PATCH] fix #3326 Add index_prefixes to Text property mapping --- .../Mapping/Types/Core/Text/TextAttribute.cs | 1 + .../Types/Core/Text/TextIndexPrefixes.cs | 32 +++++++++++++++++++ .../Mapping/Types/Core/Text/TextProperty.cs | 7 ++++ .../Tests.Configuration/tests.default.yaml | 2 +- .../Types/Core/Text/TextPropertyTests.cs | 14 ++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/Nest/Mapping/Types/Core/Text/TextIndexPrefixes.cs diff --git a/src/Nest/Mapping/Types/Core/Text/TextAttribute.cs b/src/Nest/Mapping/Types/Core/Text/TextAttribute.cs index 6915b2f6870..b61e6b2d913 100644 --- a/src/Nest/Mapping/Types/Core/Text/TextAttribute.cs +++ b/src/Nest/Mapping/Types/Core/Text/TextAttribute.cs @@ -17,6 +17,7 @@ public TextAttribute() : base(FieldType.Text) { } bool? ITextProperty.EagerGlobalOrdinals { get; set; } bool? ITextProperty.Fielddata { get; set; } IFielddataFrequencyFilter ITextProperty.FielddataFrequencyFilter { get; set; } + ITextIndexPrefixes ITextProperty.IndexPrefixes { get; set; } bool? ITextProperty.Index { get; set; } IndexOptions? ITextProperty.IndexOptions { get; set; } bool? ITextProperty.Norms { get; set; } diff --git a/src/Nest/Mapping/Types/Core/Text/TextIndexPrefixes.cs b/src/Nest/Mapping/Types/Core/Text/TextIndexPrefixes.cs new file mode 100644 index 00000000000..713ca5fc3c2 --- /dev/null +++ b/src/Nest/Mapping/Types/Core/Text/TextIndexPrefixes.cs @@ -0,0 +1,32 @@ +using Newtonsoft.Json; + +namespace Nest +{ + [JsonObject(MemberSerialization.OptIn)] + [JsonConverter(typeof(ReadAsTypeJsonConverter))] + public interface ITextIndexPrefixes + { + [JsonProperty("min_chars")] + int? MinCharacters { get; set; } + + [JsonProperty("max_chars")] + int? MaxCharacters { get; set; } + } + + public class TextIndexPrefixes : ITextIndexPrefixes + { + public int? MinCharacters { get; set; } + public int? MaxCharacters { get; set; } + } + + public class TextIndexPrefixesDescriptor + : DescriptorBase, ITextIndexPrefixes + { + int? ITextIndexPrefixes.MinCharacters { get; set; } + int? ITextIndexPrefixes.MaxCharacters { get; set; } + + public TextIndexPrefixesDescriptor MinCharacters(int? min) => Assign(a => a.MinCharacters = min); + + public TextIndexPrefixesDescriptor MaxCharacters(int? max) => Assign(a => a.MaxCharacters = max); + } +} diff --git a/src/Nest/Mapping/Types/Core/Text/TextProperty.cs b/src/Nest/Mapping/Types/Core/Text/TextProperty.cs index 16fe8452eb7..bfd6bca684e 100644 --- a/src/Nest/Mapping/Types/Core/Text/TextProperty.cs +++ b/src/Nest/Mapping/Types/Core/Text/TextProperty.cs @@ -28,6 +28,9 @@ public interface ITextProperty : ICoreProperty [JsonProperty("fielddata_frequency_filter")] IFielddataFrequencyFilter FielddataFrequencyFilter { get; set; } + [JsonProperty("index_prefixes")] + ITextIndexPrefixes IndexPrefixes { get; set; } + [JsonProperty("index")] bool? Index { get; set; } @@ -53,6 +56,7 @@ public TextProperty() : base(FieldType.Text) { } public bool? EagerGlobalOrdinals { get; set; } public bool? Fielddata { get; set; } public IFielddataFrequencyFilter FielddataFrequencyFilter { get; set; } + public ITextIndexPrefixes IndexPrefixes { get; set; } public bool? Index { get; set; } public IndexOptions? IndexOptions { get; set; } public bool? Norms { get; set; } @@ -72,6 +76,7 @@ public class TextPropertyDescriptor bool? ITextProperty.EagerGlobalOrdinals { get; set; } bool? ITextProperty.Fielddata { get; set; } IFielddataFrequencyFilter ITextProperty.FielddataFrequencyFilter { get; set; } + ITextIndexPrefixes ITextProperty.IndexPrefixes { get; set; } bool? ITextProperty.Index { get; set; } IndexOptions? ITextProperty.IndexOptions { get; set; } bool? ITextProperty.Norms { get; set; } @@ -88,6 +93,8 @@ public TextPropertyDescriptor() : base(FieldType.Text) { } public TextPropertyDescriptor Fielddata(bool? fielddata = true) => Assign(a => a.Fielddata = fielddata); public TextPropertyDescriptor FielddataFrequencyFilter(Func selector) => Assign(a => a.FielddataFrequencyFilter = selector?.Invoke(new FielddataFrequencyFilterDescriptor())); + public TextPropertyDescriptor IndexPrefixes(Func selector) => + Assign(a => a.IndexPrefixes = selector?.Invoke(new TextIndexPrefixesDescriptor())); public TextPropertyDescriptor Index(bool? index = true) => Assign(a => a.Index = index); public TextPropertyDescriptor IndexOptions(IndexOptions? indexOptions) => Assign(a => a.IndexOptions = indexOptions); public TextPropertyDescriptor Norms(bool? enabled = true) => Assign(a => a.Norms = enabled); diff --git a/src/Tests/Tests.Configuration/tests.default.yaml b/src/Tests/Tests.Configuration/tests.default.yaml index 246e803ded7..550f93f5743 100644 --- a/src/Tests/Tests.Configuration/tests.default.yaml +++ b/src/Tests/Tests.Configuration/tests.default.yaml @@ -5,7 +5,7 @@ # tracked by git). # mode either u (unit test), i (integration test) or m (mixed mode) -mode: i +mode: u # the elasticsearch version that should be started # Can be a snapshot version of sonatype or "latest" to get the latest snapshot of sonatype elasticsearch_version: 6.3.0 diff --git a/src/Tests/Tests/Mapping/Types/Core/Text/TextPropertyTests.cs b/src/Tests/Tests/Mapping/Types/Core/Text/TextPropertyTests.cs index 78f830f5bcc..60fbd286441 100644 --- a/src/Tests/Tests/Mapping/Types/Core/Text/TextPropertyTests.cs +++ b/src/Tests/Tests/Mapping/Types/Core/Text/TextPropertyTests.cs @@ -31,6 +31,11 @@ public TextPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cl max = 100.00, min_segment_size = 2 }, + index_prefixes = new + { + min_chars = 1, + max_chars = 10 + }, fields = new { raw = new @@ -68,6 +73,10 @@ public TextPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cl .Max(100) .MinSegmentSize(2) ) + .IndexPrefixes(i => i + .MinCharacters(1) + .MaxCharacters(10) + ) .Fields(fd => fd .Keyword(k => k .Name("raw") @@ -101,6 +110,11 @@ public TextPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cl Max = 100, MinSegmentSize = 2 }, + IndexPrefixes = new TextIndexPrefixes + { + MinCharacters = 1, + MaxCharacters = 10 + }, Fields = new Properties { { "raw", new KeywordProperty