diff --git a/src/Nest/Ingest/Processors/AppendProcessor.cs b/src/Nest/Ingest/Processors/AppendProcessor.cs index 0e09befb585..0b00b6e2feb 100644 --- a/src/Nest/Ingest/Processors/AppendProcessor.cs +++ b/src/Nest/Ingest/Processors/AppendProcessor.cs @@ -20,12 +20,17 @@ public interface IAppendProcessor : IProcessor [DataMember(Name ="value")] IEnumerable Value { get; set; } + + [DataMember(Name = "allow_duplicates")] + bool? AllowDuplicates { get; set; } } public class AppendProcessor : ProcessorBase, IAppendProcessor { public Field Field { get; set; } public IEnumerable Value { get; set; } + public bool? AllowDuplicates { get; set; } + protected override string Name => "append"; } @@ -35,6 +40,7 @@ public class AppendProcessorDescriptor : ProcessorDescriptorBase "append"; Field IAppendProcessor.Field { get; set; } IEnumerable IAppendProcessor.Value { get; set; } + bool? IAppendProcessor.AllowDuplicates { get; set; } public AppendProcessorDescriptor Field(Field field) => Assign(field, (a, v) => a.Field = v); @@ -49,5 +55,7 @@ public AppendProcessorDescriptor Value(params TValue[] values) => Ass a.Value = (v.First() as IEnumerable)?.Cast(); else a.Value = v?.Cast(); }); + + public AppendProcessorDescriptor AllowDuplicates(bool? allowDuplicates = true) => Assign(allowDuplicates, (a, v) => a.AllowDuplicates = v); } } diff --git a/tests/Tests/Ingest/ProcessorAssertions.cs b/tests/Tests/Ingest/ProcessorAssertions.cs index 049587af294..ac308fb8451 100644 --- a/tests/Tests/Ingest/ProcessorAssertions.cs +++ b/tests/Tests/Ingest/ProcessorAssertions.cs @@ -9,6 +9,7 @@ using Elastic.Elasticsearch.Xunit.XunitPlumbing; using Nest; using Tests.Core.Client; +using Tests.Core.Extensions; using Tests.Core.Xunit; using Tests.Domain; @@ -56,22 +57,33 @@ public static IPromise> Fluent(ProcessorsDescriptor d) foreach (var a in All) a.Fluent(d); return d; } - + public class Append : ProcessorAssertion { - public override Func>> Fluent => d => d - .Append(a => a - .Field(p => p.State) - .Value(StateOfBeing.Stable, StateOfBeing.VeryActive) - ); + public override Func>> Fluent => + d => d.Append(a => a.Field(p => p.State).Value(StateOfBeing.Stable, StateOfBeing.VeryActive)); - public override IProcessor Initializer => new AppendProcessor + public override IProcessor Initializer => new AppendProcessor { Field = "state", Value = new object[] { StateOfBeing.Stable, StateOfBeing.VeryActive }}; + + public override object Json => new { - Field = "state", - Value = new object[] { StateOfBeing.Stable, StateOfBeing.VeryActive } + field = "state", + value = new[] { "Stable", "VeryActive" } }; - public override object Json => new { field = "state", value = new[] { "Stable", "VeryActive" } }; + public override string Key => "append"; + } + + [SkipVersion("<7.11.0", "Allow duplicates added in 7.11")] + public class AppendWithAllowDuplicates : ProcessorAssertion + { + public override Func>> Fluent => + d => d.Append(a => a.Field(p => p.State).Value(StateOfBeing.Stable, StateOfBeing.VeryActive).AllowDuplicates(false)); + + public override IProcessor Initializer => new AppendProcessor { Field = "state", Value = new object[] { StateOfBeing.Stable, StateOfBeing.VeryActive }, AllowDuplicates = false }; + + public override object Json => new { field = "state", value = new[] { "Stable", "VeryActive" }, allow_duplicates = false }; + public override string Key => "append"; }