Skip to content

Commit e924689

Browse files
authored
Add PreserveOriginal to NGramTokenFilter (#4736)
Relates: #4718, elastic/elasticsearch#55432 Added in Elasticsearch 7.8.0
1 parent 11d0d27 commit e924689

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

src/Nest/Analysis/TokenFilters/NgramTokenFilter.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ public interface INGramTokenFilter : ITokenFilter
2525
[DataMember(Name ="min_gram")]
2626
[JsonFormatter(typeof(NullableStringIntFormatter))]
2727
int? MinGram { get; set; }
28+
29+
/// <summary>
30+
/// Emits original token when set to `true`. Defaults to `false`.
31+
/// <para />
32+
/// Available in Elasticsearch 7.8.0+
33+
/// </summary>
34+
[DataMember(Name = "preserve_original")]
35+
[JsonFormatter(typeof(NullableStringBooleanFormatter))]
36+
bool? PreserveOriginal { get; set; }
2837
}
2938

3039
/// <inheritdoc />
@@ -37,6 +46,9 @@ public NGramTokenFilter() : base("ngram") { }
3746

3847
/// <inheritdoc />
3948
public int? MinGram { get; set; }
49+
50+
/// <inheritdoc />
51+
public bool? PreserveOriginal { get; set; }
4052
}
4153

4254
/// <inheritdoc />
@@ -48,10 +60,16 @@ public class NGramTokenFilterDescriptor
4860

4961
int? INGramTokenFilter.MinGram { get; set; }
5062

51-
/// <inheritdoc />
63+
bool? INGramTokenFilter.PreserveOriginal { get; set; }
64+
65+
/// <inheritdoc cref="INGramTokenFilter.MinGram" />
5266
public NGramTokenFilterDescriptor MinGram(int? minGram) => Assign(minGram, (a, v) => a.MinGram = v);
5367

54-
/// <inheritdoc />
68+
/// <inheritdoc cref="INGramTokenFilter.MaxGram" />
5569
public NGramTokenFilterDescriptor MaxGram(int? maxGram) => Assign(maxGram, (a, v) => a.MaxGram = v);
70+
71+
/// <inheritdoc cref="INGramTokenFilter.PreserveOriginal" />
72+
public NGramTokenFilterDescriptor PreserveOriginal(bool? preserveOriginal = true) =>
73+
Assign(preserveOriginal, (a, v) => a.PreserveOriginal = v);
5674
}
5775
}

tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,18 @@ public class NGramTests : TokenFilterAssertionBase<NGramTests>
489489
public override string Name => "ngram";
490490
}
491491

492+
[SkipVersion("<7.8.0", "PreserveOriginal introduced in 7.8.0")]
493+
public class NGramPreserveOriginalTests : TokenFilterAssertionBase<NGramPreserveOriginalTests>
494+
{
495+
public override FuncTokenFilters Fluent => (n, tf) => tf
496+
.NGram(n, t => t.MinGram(3).MaxGram(4).PreserveOriginal());
497+
498+
public override ITokenFilter Initializer => new NGramTokenFilter { MinGram = 3, MaxGram = 4, PreserveOriginal = true };
499+
500+
public override object Json => new { type = "ngram", min_gram = 3, max_gram = 4, preserve_original = true };
501+
public override string Name => "ngrampo";
502+
}
503+
492504
public class PatternCaptureTests : TokenFilterAssertionBase<PatternCaptureTests>
493505
{
494506
public override FuncTokenFilters Fluent => (n, tf) => tf

0 commit comments

Comments
 (0)