Skip to content

Commit cfe580f

Browse files
committed
Fix sort mode and made accessible to all sort descriptors
1 parent caabf36 commit cfe580f

File tree

4 files changed

+58
-14
lines changed

4 files changed

+58
-14
lines changed

Diff for: src/Nest/DSL/Search/SortFieldDescriptor.cs

+28-10
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,36 @@ public enum SortOrder
1818
Descending
1919
}
2020

21+
[JsonConverter(typeof(StringEnumConverter))]
22+
public enum SortMode
23+
{
24+
[EnumMember(Value = "min")]
25+
Min,
26+
[EnumMember(Value = "max")]
27+
Max,
28+
[EnumMember(Value = "sum")]
29+
Sum,
30+
[EnumMember(Value = "avg")]
31+
Average
32+
}
33+
2134
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
2235
public interface ISort
2336
{
24-
2537
[JsonProperty("missing")]
2638
string Missing { get; set; }
2739

2840
[JsonProperty("order")]
2941
SortOrder? Order { get; set; }
42+
43+
[JsonProperty("mode")]
44+
SortMode? Mode { get; set; }
3045
}
3146

3247
public interface IFieldSort : ISort
3348
{
3449
PropertyPathMarker Field { get; set; }
3550

36-
[JsonProperty("mode")]
37-
ScoreMode? Mode { get; set; }
38-
3951
[JsonProperty("nested_filter")]
4052
FilterContainer NestedFilter { get; set; }
4153

@@ -51,7 +63,7 @@ public class Sort : IFieldSort
5163
public PropertyPathMarker Field { get; set; }
5264
public string Missing { get; set; }
5365
public SortOrder? Order { get; set; }
54-
public ScoreMode? Mode { get; set; }
66+
public SortMode? Mode { get; set; }
5567
public FilterContainer NestedFilter { get; set; }
5668
public PropertyPathMarker NestedPath { get; set; }
5769
public bool? IgnoreUnmappedFields { get; set; }
@@ -67,7 +79,7 @@ public class SortFieldDescriptor<T> : IFieldSort where T : class
6779

6880
SortOrder? ISort.Order { get; set; }
6981

70-
ScoreMode? IFieldSort.Mode { get; set; }
82+
SortMode? ISort.Mode { get; set; }
7183

7284
FilterContainer IFieldSort.NestedFilter { get; set; }
7385

@@ -129,27 +141,33 @@ public virtual SortFieldDescriptor<T> Order(SortOrder order)
129141
return this;
130142
}
131143

144+
public virtual SortFieldDescriptor<T> Mode(SortMode mode)
145+
{
146+
Self.Mode = mode;
147+
return this;
148+
}
149+
132150
public virtual SortFieldDescriptor<T> NestedMin()
133151
{
134-
Self.Mode = ScoreMode.Min;
152+
Self.Mode = SortMode.Min;
135153
return this;
136154
}
137155

138156
public virtual SortFieldDescriptor<T> NestedMax()
139157
{
140-
Self.Mode = ScoreMode.Max;
158+
Self.Mode = SortMode.Max;
141159
return this;
142160
}
143161

144162
public virtual SortFieldDescriptor<T> NestedSum()
145163
{
146-
Self.Mode = ScoreMode.Sum;
164+
Self.Mode = SortMode.Sum;
147165
return this;
148166
}
149167

150168
public virtual SortFieldDescriptor<T> NestedAvg()
151169
{
152-
Self.Mode = ScoreMode.Average;
170+
Self.Mode = SortMode.Average;
153171
return this;
154172
}
155173

Diff for: src/Nest/DSL/Search/SortGeoDistanceDescriptor.cs

+11
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class GeoDistanceSort : IGeoDistanceSort
2020
{
2121
public string Missing { get; set; }
2222
public SortOrder? Order { get; set; }
23+
public SortMode? Mode { get; set; }
2324
public PropertyPathMarker Field { get; set; }
2425
public string PinLocation { get; set; }
2526
public GeoUnit? GeoUnit { get; set; }
@@ -30,6 +31,7 @@ object ICustomJson.GetCustomJson()
3031
{
3132
{ this.Field, this.PinLocation },
3233
{ "missing", this.Missing },
34+
{ "mode", this.Mode },
3335
{ "order", this.Order },
3436
{ "unit", this.GeoUnit }
3537
};
@@ -46,6 +48,8 @@ public class SortGeoDistanceDescriptor<T> : IGeoDistanceSort where T : class
4648

4749
SortOrder? ISort.Order { get; set; }
4850

51+
SortMode? ISort.Mode { get; set; }
52+
4953
string IGeoDistanceSort.PinLocation { get; set; }
5054

5155
GeoUnit? IGeoDistanceSort.GeoUnit { get; set; }
@@ -114,12 +118,19 @@ public SortGeoDistanceDescriptor<T> Order(SortOrder order)
114118
return this;
115119
}
116120

121+
public SortGeoDistanceDescriptor<T> Mode(SortMode mode)
122+
{
123+
Self.Mode = mode;
124+
return this;
125+
}
126+
117127
object ICustomJson.GetCustomJson()
118128
{
119129
return new Dictionary<object, object>
120130
{
121131
{ Self.Field, Self.PinLocation },
122132
{ "missing", Self.Missing },
133+
{ "mode", Self.Mode},
123134
{ "order", Self.Order },
124135
{ "unit", Self.GeoUnit }
125136
};

Diff for: src/Nest/DSL/Search/SortScriptDescriptor.cs

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class ScriptSort : IScriptSort
2222
{
2323
public string Missing { get; set; }
2424
public SortOrder? Order { get; set; }
25+
public SortMode? Mode { get; set; }
2526
public string Type { get; set; }
2627
public string Script { get; set; }
2728
public Dictionary<string, object> Params { get; set; }
@@ -35,6 +36,8 @@ public class SortScriptDescriptor<T> : IScriptSort
3536

3637
SortOrder? ISort.Order { get; set; }
3738

39+
SortMode? ISort.Mode { get; set; }
40+
3841
string IScriptSort.Type { get; set; }
3942

4043
string IScriptSort.Script { get; set; }
@@ -97,5 +100,11 @@ public SortScriptDescriptor<T> Order(SortOrder order)
97100
Self.Order = order;
98101
return this;
99102
}
103+
104+
public SortScriptDescriptor<T> Mode(SortMode mode)
105+
{
106+
Self.Mode = mode;
107+
return this;
108+
}
100109
}
101110
}

Diff for: src/Tests/Nest.Tests.Unit/Search/Sorting/SortTests.cs

+10-4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public void TestSortOnSortField()
4545
.OnField(e => e.Name.Suffix("sort"))
4646
.MissingLast()
4747
.Descending()
48+
.Mode(SortMode.Min)
4849
);
4950
var json = TestElasticClient.Serialize(s);
5051
var expected = @"
@@ -54,7 +55,8 @@ public void TestSortOnSortField()
5455
sort: {
5556
""name.sort"": {
5657
missing: ""_last"",
57-
order: ""desc""
58+
order: ""desc"",
59+
mode: ""min""
5860
}
5961
}
6062
}";
@@ -79,8 +81,8 @@ public void TestSortOnNestedField()
7981
size: 10,
8082
sort: {
8183
""contributors.age"": {
82-
""mode"": ""max"",
83-
""order"": ""desc""
84+
""order"": ""desc"",
85+
""mode"": ""max""
8486
}
8587
}
8688
}";
@@ -175,6 +177,7 @@ public void TestSortGeo()
175177
.Descending()
176178
.PinTo(40, -70)
177179
.Unit(GeoUnit.Kilometers)
180+
.Mode(SortMode.Max)
178181
);
179182
var json = TestElasticClient.Serialize(s);
180183
var expected = @"
@@ -185,6 +188,7 @@ public void TestSortGeo()
185188
_geo_distance: {
186189
""origin"": ""40, -70"",
187190
missing: ""_last"",
191+
mode: ""max"",
188192
order: ""desc"",
189193
unit: ""km""
190194
}
@@ -202,6 +206,7 @@ public void TestSortScript()
202206
.SortScript(sort => sort
203207
.MissingLast()
204208
.Descending()
209+
.Mode(SortMode.Average)
205210
.Script("doc['field_name'].value * factor")
206211
.Params(p => p
207212
.Add("factor", 1.1)
@@ -221,7 +226,8 @@ public void TestSortScript()
221226
factor: 1.1
222227
},
223228
missing: ""_last"",
224-
order: ""desc""
229+
order: ""desc"",
230+
mode: ""avg""
225231
}
226232
}
227233
}";

0 commit comments

Comments
 (0)