Skip to content

Commit 2c8347a

Browse files
Add PreserveOriginal to EdgeNgramTokenFilter (#4727) (#4751)
Relates: #4718 Add in Elasticsearch 7.8.0 Co-authored-by: Russ Cam <[email protected]>
1 parent b9969ae commit 2c8347a

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

src/Nest/Analysis/TokenFilters/EdgeNGram/EdgeNGramTokenFilter.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ public interface IEdgeNGramTokenFilter : ITokenFilter
3131
/// </summary>
3232
[DataMember(Name ="side")]
3333
EdgeNGramSide? Side { get; set; }
34+
35+
/// <summary>
36+
/// Emits original token when set to <c>true</c>. Defaults to <c>false</c>.
37+
/// <para />
38+
/// Available in Elasticsearch 7.8.0+
39+
/// </summary>
40+
[DataMember(Name = "preserve_original")]
41+
[JsonFormatter(typeof(NullableStringBooleanFormatter))]
42+
bool? PreserveOriginal { get; set; }
3443
}
3544

3645
/// <inheritdoc />
@@ -46,6 +55,9 @@ public EdgeNGramTokenFilter() : base("edge_ngram") { }
4655

4756
/// <inheritdoc />
4857
public EdgeNGramSide? Side { get; set; }
58+
59+
/// <inheritdoc />
60+
public bool? PreserveOriginal { get; set; }
4961
}
5062

5163
/// <inheritdoc />
@@ -54,17 +66,21 @@ public class EdgeNGramTokenFilterDescriptor
5466
{
5567
protected override string Type => "edge_ngram";
5668
int? IEdgeNGramTokenFilter.MaxGram { get; set; }
57-
5869
int? IEdgeNGramTokenFilter.MinGram { get; set; }
5970
EdgeNGramSide? IEdgeNGramTokenFilter.Side { get; set; }
71+
bool? IEdgeNGramTokenFilter.PreserveOriginal { get; set; }
6072

61-
/// <inheritdoc />
73+
/// <inheritdoc cref="IEdgeNGramTokenFilter.MinGram" />
6274
public EdgeNGramTokenFilterDescriptor MinGram(int? minGram) => Assign(minGram, (a, v) => a.MinGram = v);
6375

64-
/// <inheritdoc />
76+
/// <inheritdoc cref="IEdgeNGramTokenFilter.MaxGram" />
6577
public EdgeNGramTokenFilterDescriptor MaxGram(int? maxGram) => Assign(maxGram, (a, v) => a.MaxGram = v);
6678

67-
/// <inheritdoc />
79+
/// <inheritdoc cref="IEdgeNGramTokenFilter.Side" />
6880
public EdgeNGramTokenFilterDescriptor Side(EdgeNGramSide? side) => Assign(side, (a, v) => a.Side = v);
81+
82+
/// <inheritdoc cref="IEdgeNGramTokenFilter.PreserveOriginal" />
83+
public EdgeNGramTokenFilterDescriptor PreserveOriginal(bool? preserveOriginal = true) =>
84+
Assign(preserveOriginal, (a, v) => a.PreserveOriginal = v);
6985
}
7086
}

tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ public class EdgeNgramTests : TokenFilterAssertionBase<EdgeNgramTests>
9898
public override string Name => "etf";
9999
}
100100

101+
[SkipVersion("<7.8.0", "PreserveOriginal introduced in 7.8.0")]
102+
public class EdgeNgramPreserveOriginalTests : TokenFilterAssertionBase<EdgeNgramPreserveOriginalTests>
103+
{
104+
public override FuncTokenFilters Fluent => (n, tf) => tf
105+
.EdgeNGram(n, t => t.MaxGram(2).MinGram(1).PreserveOriginal());
106+
107+
public override ITokenFilter Initializer => new EdgeNGramTokenFilter { MaxGram = 2, MinGram = 1, PreserveOriginal = true };
108+
109+
public override object Json => new { type = "edge_ngram", min_gram = 1, max_gram = 2, preserve_original = true };
110+
public override string Name => "etfpo";
111+
}
112+
101113
public class ElisionTests : TokenFilterAssertionBase<ElisionTests>
102114
{
103115
public override FuncTokenFilters Fluent => (n, tf) => tf.Elision(n, t => t.Articles("a", "b", "c").ArticlesCase());

0 commit comments

Comments
 (0)