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