diff --git a/src/Nest/Analysis/TokenFilters/Synonym/SynonymGraphTokenFilter.cs b/src/Nest/Analysis/TokenFilters/Synonym/SynonymGraphTokenFilter.cs index e12183673ff..db2ab8bc889 100644 --- a/src/Nest/Analysis/TokenFilters/Synonym/SynonymGraphTokenFilter.cs +++ b/src/Nest/Analysis/TokenFilters/Synonym/SynonymGraphTokenFilter.cs @@ -31,6 +31,10 @@ public interface ISynonymGraphTokenFilter : ITokenFilter [JsonProperty("tokenizer")] string Tokenizer { get; set; } + + /// + [JsonProperty("lenient")] + bool? Lenient { get; set; } } /// @@ -54,6 +58,9 @@ public SynonymGraphTokenFilter() : base("synonym_graph") { } /// public bool? Expand { get; set; } + /// + public bool? Lenient { get; set; } + /// public string Tokenizer { get; set; } } @@ -65,6 +72,7 @@ public class SynonymGraphTokenFilterDescriptor bool? ISynonymGraphTokenFilter.IgnoreCase { get; set; } bool? ISynonymGraphTokenFilter.Expand { get; set; } + bool? ISynonymGraphTokenFilter.Lenient { get; set; } string ISynonymGraphTokenFilter.Tokenizer { get; set; } string ISynonymGraphTokenFilter.SynonymsPath { get; set; } SynonymFormat? ISynonymGraphTokenFilter.Format{ get; set; } @@ -78,6 +86,10 @@ public class SynonymGraphTokenFilterDescriptor /// public SynonymGraphTokenFilterDescriptor Expand(bool? expand = true) => Assign(a => a.Expand = expand); + /// + public SynonymGraphTokenFilterDescriptor Lenient(bool? lenient = true) => Assign(a => a.Lenient = lenient); + + /// public SynonymGraphTokenFilterDescriptor Tokenizer(string tokenizer) => Assign(a => a.Tokenizer = tokenizer); diff --git a/src/Nest/Analysis/TokenFilters/Synonym/SynonymTokenFilter.cs b/src/Nest/Analysis/TokenFilters/Synonym/SynonymTokenFilter.cs index a7d62ae7578..fbdb7f153f7 100644 --- a/src/Nest/Analysis/TokenFilters/Synonym/SynonymTokenFilter.cs +++ b/src/Nest/Analysis/TokenFilters/Synonym/SynonymTokenFilter.cs @@ -30,6 +30,13 @@ public interface ISynonymTokenFilter : ITokenFilter [JsonProperty("tokenizer")] string Tokenizer { get; set; } + + /// + /// If `true` ignores exceptions while parsing the synonym configuration. It is important + // to note that only those synonym rules which cannot get parsed are ignored. + /// + [JsonProperty("lenient")] + bool? Lenient { get; set; } } /// @@ -53,6 +60,9 @@ public SynonymTokenFilter() : base("synonym") { } /// public bool? Expand { get; set; } + /// + public bool? Lenient { get; set; } + /// public string Tokenizer { get; set; } } @@ -64,6 +74,7 @@ public class SynonymTokenFilterDescriptor bool? ISynonymTokenFilter.IgnoreCase { get; set; } bool? ISynonymTokenFilter.Expand { get; set; } + bool? ISynonymTokenFilter.Lenient { get; set; } string ISynonymTokenFilter.Tokenizer { get; set; } string ISynonymTokenFilter.SynonymsPath { get; set; } SynonymFormat? ISynonymTokenFilter.Format { get; set; } @@ -76,6 +87,9 @@ public class SynonymTokenFilterDescriptor /// public SynonymTokenFilterDescriptor Expand(bool? expand = true) => Assign(a => a.Expand = expand); + /// + public SynonymTokenFilterDescriptor Lenient(bool? lenient = true) => Assign(a => a.Lenient = lenient); + /// public SynonymTokenFilterDescriptor Tokenizer(string tokenizer) => Assign(a => a.Tokenizer = tokenizer); diff --git a/src/Tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs b/src/Tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs index 1cbb211d73a..bfe98a4dbef 100644 --- a/src/Tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs +++ b/src/Tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs @@ -674,7 +674,33 @@ public class SynonymTests : TokenFilterAssertionBase expand = true, tokenizer = "whitespace" }; + } + + [SkipVersion("<6.4.0", "Lenient is an option introduced in 6.4.0")] + public class SynonymLenientTests : TokenFilterAssertionBase + { + public override string Name => "syn"; + private readonly string[] _synonyms = {"foo", "bar => baz"}; + + public override ITokenFilter Initializer => + new SynonymTokenFilter + { + Lenient = true, + Synonyms = _synonyms + }; + public override FuncTokenFilters Fluent => (n, tf) => tf + .Synonym(n, t => t + .Lenient() + .Synonyms(_synonyms) + ); + + public override object Json => new + { + type = "synonym", + synonyms = _synonyms, + lenient = true, + }; } public class SynonymGraphTests : TokenFilterAssertionBase