diff --git a/src/Nest/Analysis/TokenFilters/PredicateTokenFilter .cs b/src/Nest/Analysis/TokenFilters/PredicateTokenFilter .cs new file mode 100644 index 00000000000..4f7f18a4fa7 --- /dev/null +++ b/src/Nest/Analysis/TokenFilters/PredicateTokenFilter .cs @@ -0,0 +1,43 @@ +using System; +using Newtonsoft.Json; + +namespace Nest +{ + /// + /// The predicate_token_filter token filter takes a predicate script, and removes tokens that do + /// not match the predicate. + /// + public interface IPredicateTokenFilter : ITokenFilter + { + /// + /// a predicate script that determines whether or not the current token will + /// be emitted. Note that only inline scripts are supported. + /// + [JsonProperty("script")] + IScript Script { get; set; } + } + + public class PredicateTokenFilter : TokenFilterBase, IPredicateTokenFilter + { + public PredicateTokenFilter() : base("predicate_token_filter") { } + + public IScript Script { get; set; } + } + + /// + public class PredicateTokenFilterDescriptor + : TokenFilterDescriptorBase, IPredicateTokenFilter + { + protected override string Type => "predicate_token_filter"; + + IScript IPredicateTokenFilter.Script { get; set; } + + /// + public PredicateTokenFilterDescriptor Script(Func scriptSelector) => + Assign(a => a.Script = scriptSelector?.Invoke(new ScriptDescriptor())); + + /// + public PredicateTokenFilterDescriptor Script(string predicate) => + Assign(a => a.Script = new InlineScript(predicate)); + } +}