Skip to content

Commit 21b07bf

Browse files
committed
Add Sort Ingest Processor
See elastic/elasticsearch#17999
1 parent da76b34 commit 21b07bf

File tree

4 files changed

+67
-2
lines changed

4 files changed

+67
-2
lines changed

src/Nest/Ingest/PipelineJsonConverter.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ private List<IProcessor> GetProcessors(JToken jsonProcessors, JsonSerializer ser
7676
case "set":
7777
processors.Add(jsonProcessor.ToObject<SetProcessor>(serializer));
7878
break;
79+
case "sort":
80+
processors.Add(jsonProcessor.ToObject<SortProcessor>(serializer));
81+
break;
7982
case "split":
8083
processors.Add(jsonProcessor.ToObject<SplitProcessor>(serializer));
8184
break;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq.Expressions;
4+
using Newtonsoft.Json;
5+
6+
namespace Nest
7+
{
8+
/// <summary>
9+
/// Sorts the elements of an array ascending or descending. Homogeneous arrays of numbers
10+
/// will be sorted numerically, while arrays of strings or heterogeneous arrays
11+
/// of strings and numbers will be sorted lexicographically.
12+
/// </summary>
13+
[JsonObject(MemberSerialization.OptIn)]
14+
[JsonConverter(typeof(ProcessorJsonConverter<SortProcessor>))]
15+
public interface ISortProcessor : IProcessor
16+
{
17+
/// <summary>
18+
/// The field to be sorted
19+
/// </summary>
20+
[JsonProperty("field")]
21+
Field Field { get; set; }
22+
23+
/// <summary>
24+
/// The sort order to use. Default is ascending.
25+
/// </summary>
26+
[JsonProperty("order")]
27+
SortOrder? Order { get; set; }
28+
}
29+
30+
public class SortProcessor : ProcessorBase, ISortProcessor
31+
{
32+
protected override string Name => "sort";
33+
34+
public Field Field { get; set; }
35+
36+
public SortOrder? Order { get; set; }
37+
}
38+
39+
public class SortProcessorDescriptor<T>
40+
: ProcessorDescriptorBase<SortProcessorDescriptor<T>, ISortProcessor>, ISortProcessor
41+
where T : class
42+
{
43+
protected override string Name => "sort";
44+
45+
Field ISortProcessor.Field { get; set; }
46+
SortOrder? ISortProcessor.Order { get; set; }
47+
48+
public SortProcessorDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
49+
50+
public SortProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
51+
Assign(a => a.Field = objectPath);
52+
53+
public SortProcessorDescriptor<T> Order(SortOrder order = SortOrder.Ascending) =>
54+
Assign(a => a.Order = order);
55+
}
56+
}

src/Nest/Ingest/ProcessorsDescriptor.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public ProcessorsDescriptor Convert<T>(Func<ConvertProcessorDescriptor<T>, IConv
2626
public ProcessorsDescriptor Date<T>(Func<DateProcessorDescriptor<T>, IDateProcessor> selector) where T : class =>
2727
Assign(a => a.AddIfNotNull(selector?.Invoke(new DateProcessorDescriptor<T>())));
2828

29-
3029
public ProcessorsDescriptor Fail(Func<FailProcessorDescriptor, IFailProcessor> selector) =>
3130
Assign(a => a.AddIfNotNull(selector?.Invoke(new FailProcessorDescriptor())));
3231

@@ -62,10 +61,16 @@ public ProcessorsDescriptor Remove<T>(Func<RemoveProcessorDescriptor<T>, IRemove
6261
public ProcessorsDescriptor Rename<T>(Func<RenameProcessorDescriptor<T>, IRenameProcessor> selector) where T : class =>
6362
Assign(a => a.AddIfNotNull(selector?.Invoke(new RenameProcessorDescriptor<T>())));
6463

65-
6664
public ProcessorsDescriptor Set<T>(Func<SetProcessorDescriptor<T>, ISetProcessor> selector) where T : class =>
6765
Assign(a => a.AddIfNotNull(selector?.Invoke(new SetProcessorDescriptor<T>())));
6866

67+
/// <summary>
68+
/// The Sort processor sorts the elements of an array ascending or descending. Homogeneous arrays of numbers
69+
/// will be sorted numerically, while arrays of strings or heterogeneous arrays
70+
/// of strings and numbers will be sorted lexicographically.
71+
/// </summary>
72+
public ProcessorsDescriptor Sort<T>(Func<SortProcessorDescriptor<T>, ISortProcessor> selector) where T : class =>
73+
Assign(a => a.AddIfNotNull(selector?.Invoke(new SortProcessorDescriptor<T>())));
6974

7075
public ProcessorsDescriptor Split<T>(Func<SplitProcessorDescriptor<T>, ISplitProcessor> selector) where T : class =>
7176
Assign(a => a.AddIfNotNull(selector?.Invoke(new SplitProcessorDescriptor<T>())));

src/Nest/Nest.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,7 @@
765765
<Compile Include="Indices\StatusManagement\Upgrade\UpgradeStatus\UpgradeStatusResponseJsonConverter.cs" />
766766
<Compile Include="Ingest\Processors\GeoIpProcessor.cs" />
767767
<Compile Include="Ingest\Processors\AttachmentProcessor.cs" />
768+
<Compile Include="Ingest\Processors\SortProcessor.cs" />
768769
<Compile Include="Mapping\AttributeBased\ElasticsearchCorePropertyAttributeBase.cs" />
769770
<Compile Include="Ingest\DeletePipeline\DeletePipelineRequest.cs" />
770771
<Compile Include="Ingest\DeletePipeline\DeletePipelineResponse.cs" />

0 commit comments

Comments
 (0)