Skip to content

Commit b8e8d32

Browse files
committed
fix #3326 Add index_prefixes to Text property mapping (#3362)
1 parent 8d87b5b commit b8e8d32

File tree

5 files changed

+55
-1
lines changed

5 files changed

+55
-1
lines changed

src/Nest/Mapping/Types/Core/Text/TextAttribute.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public TextAttribute() : base(FieldType.Text) { }
1717
bool? ITextProperty.EagerGlobalOrdinals { get; set; }
1818
bool? ITextProperty.Fielddata { get; set; }
1919
IFielddataFrequencyFilter ITextProperty.FielddataFrequencyFilter { get; set; }
20+
ITextIndexPrefixes ITextProperty.IndexPrefixes { get; set; }
2021
bool? ITextProperty.Index { get; set; }
2122
IndexOptions? ITextProperty.IndexOptions { get; set; }
2223
bool? ITextProperty.Norms { get; set; }
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Nest
4+
{
5+
[JsonObject(MemberSerialization.OptIn)]
6+
[JsonConverter(typeof(ReadAsTypeJsonConverter<TextIndexPrefixes>))]
7+
public interface ITextIndexPrefixes
8+
{
9+
[JsonProperty("min_chars")]
10+
int? MinCharacters { get; set; }
11+
12+
[JsonProperty("max_chars")]
13+
int? MaxCharacters { get; set; }
14+
}
15+
16+
public class TextIndexPrefixes : ITextIndexPrefixes
17+
{
18+
public int? MinCharacters { get; set; }
19+
public int? MaxCharacters { get; set; }
20+
}
21+
22+
public class TextIndexPrefixesDescriptor
23+
: DescriptorBase<TextIndexPrefixesDescriptor, ITextIndexPrefixes>, ITextIndexPrefixes
24+
{
25+
int? ITextIndexPrefixes.MinCharacters { get; set; }
26+
int? ITextIndexPrefixes.MaxCharacters { get; set; }
27+
28+
public TextIndexPrefixesDescriptor MinCharacters(int? min) => Assign(a => a.MinCharacters = min);
29+
30+
public TextIndexPrefixesDescriptor MaxCharacters(int? max) => Assign(a => a.MaxCharacters = max);
31+
}
32+
}

src/Nest/Mapping/Types/Core/Text/TextProperty.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public interface ITextProperty : ICoreProperty
2828
[JsonProperty("fielddata_frequency_filter")]
2929
IFielddataFrequencyFilter FielddataFrequencyFilter { get; set; }
3030

31+
[JsonProperty("index_prefixes")]
32+
ITextIndexPrefixes IndexPrefixes { get; set; }
33+
3134
[JsonProperty("index")]
3235
bool? Index { get; set; }
3336

@@ -53,6 +56,7 @@ public TextProperty() : base(FieldType.Text) { }
5356
public bool? EagerGlobalOrdinals { get; set; }
5457
public bool? Fielddata { get; set; }
5558
public IFielddataFrequencyFilter FielddataFrequencyFilter { get; set; }
59+
public ITextIndexPrefixes IndexPrefixes { get; set; }
5660
public bool? Index { get; set; }
5761
public IndexOptions? IndexOptions { get; set; }
5862
public bool? Norms { get; set; }
@@ -72,6 +76,7 @@ public class TextPropertyDescriptor<T>
7276
bool? ITextProperty.EagerGlobalOrdinals { get; set; }
7377
bool? ITextProperty.Fielddata { get; set; }
7478
IFielddataFrequencyFilter ITextProperty.FielddataFrequencyFilter { get; set; }
79+
ITextIndexPrefixes ITextProperty.IndexPrefixes { get; set; }
7580
bool? ITextProperty.Index { get; set; }
7681
IndexOptions? ITextProperty.IndexOptions { get; set; }
7782
bool? ITextProperty.Norms { get; set; }
@@ -88,6 +93,8 @@ public TextPropertyDescriptor() : base(FieldType.Text) { }
8893
public TextPropertyDescriptor<T> Fielddata(bool? fielddata = true) => Assign(a => a.Fielddata = fielddata);
8994
public TextPropertyDescriptor<T> FielddataFrequencyFilter(Func<FielddataFrequencyFilterDescriptor, IFielddataFrequencyFilter> selector) =>
9095
Assign(a => a.FielddataFrequencyFilter = selector?.Invoke(new FielddataFrequencyFilterDescriptor()));
96+
public TextPropertyDescriptor<T> IndexPrefixes(Func<TextIndexPrefixesDescriptor, ITextIndexPrefixes> selector) =>
97+
Assign(a => a.IndexPrefixes = selector?.Invoke(new TextIndexPrefixesDescriptor()));
9198
public TextPropertyDescriptor<T> Index(bool? index = true) => Assign(a => a.Index = index);
9299
public TextPropertyDescriptor<T> IndexOptions(IndexOptions? indexOptions) => Assign(a => a.IndexOptions = indexOptions);
93100
public TextPropertyDescriptor<T> Norms(bool? enabled = true) => Assign(a => a.Norms = enabled);

src/Tests/Tests.Configuration/tests.default.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# tracked by git).
66

77
# mode either u (unit test), i (integration test) or m (mixed mode)
8-
mode: i
8+
mode: u
99
# the elasticsearch version that should be started
1010
# Can be a snapshot version of sonatype or "latest" to get the latest snapshot of sonatype
1111
elasticsearch_version: 6.3.0

src/Tests/Tests/Mapping/Types/Core/Text/TextPropertyTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ public TextPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cl
3131
max = 100.00,
3232
min_segment_size = 2
3333
},
34+
index_prefixes = new
35+
{
36+
min_chars = 1,
37+
max_chars = 10
38+
},
3439
fields = new
3540
{
3641
raw = new
@@ -68,6 +73,10 @@ public TextPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cl
6873
.Max(100)
6974
.MinSegmentSize(2)
7075
)
76+
.IndexPrefixes(i => i
77+
.MinCharacters(1)
78+
.MaxCharacters(10)
79+
)
7180
.Fields(fd => fd
7281
.Keyword(k => k
7382
.Name("raw")
@@ -101,6 +110,11 @@ public TextPropertyTests(WritableCluster cluster, EndpointUsage usage) : base(cl
101110
Max = 100,
102111
MinSegmentSize = 2
103112
},
113+
IndexPrefixes = new TextIndexPrefixes
114+
{
115+
MinCharacters = 1,
116+
MaxCharacters = 10
117+
},
104118
Fields = new Properties
105119
{
106120
{ "raw", new KeywordProperty

0 commit comments

Comments
 (0)