Skip to content

Commit 032a9af

Browse files
committed
CHANGED: Make SortMulti() functions instance methods
ADDED: Tests for SortMulti()
1 parent adaa0b2 commit 032a9af

File tree

4 files changed

+80
-50
lines changed

4 files changed

+80
-50
lines changed

Diff for: src/Nest/ConvenienceExtensions/MultiSortExtensions.cs

-48
This file was deleted.

Diff for: src/Nest/DSL/SearchDescriptor.cs

+29
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,35 @@ public SearchDescriptor<T> Sort(Func<SortFieldDescriptor<T>, IFieldSort> sortSel
750750
return this;
751751
}
752752

753+
/// <summary>
754+
/// <para>SortMulti allows multiple sorts to be provided on one search descriptor
755+
/// </para>
756+
/// </summary>
757+
public SearchDescriptor<T> SortMulti(params Func<SortFieldDescriptor<T>, IFieldSort>[] sorts)
758+
{
759+
foreach (var sort in sorts)
760+
{
761+
this.Sort(sort);
762+
}
763+
764+
return this;
765+
}
766+
767+
/// <summary>
768+
/// <para>SortMulti allows multiple sorts to be provided on one search descriptor
769+
/// </para>
770+
/// </summary>
771+
public SearchDescriptor<T> SortMulti(IEnumerable<SortFieldDescriptor<T>> sorts)
772+
{
773+
foreach (var sort in sorts)
774+
{
775+
var copy = sort;
776+
this.Sort(s => copy);
777+
}
778+
779+
return this;
780+
}
781+
753782
/// <summary>
754783
/// <para>SortGeoDistance() allows you to sort by a distance from a geo point.
755784
/// </para>

Diff for: src/Nest/Nest.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@
7272
<Compile Include="ConvenienceExtensions\DeleteManyExtensions.cs" />
7373
<Compile Include="ConvenienceExtensions\GetManyExtensions.cs" />
7474
<Compile Include="ConvenienceExtensions\CreateIndexExtensions.cs" />
75-
<Compile Include="ConvenienceExtensions\MultiSortExtensions.cs" />
7675
<Compile Include="ConvenienceExtensions\OpenCloseIndexExtensions.cs" />
7776
<Compile Include="ConvenienceExtensions\ExistsExtensions.cs" />
7877
<Compile Include="ConvenienceExtensions\ScrollExtensions.cs" />

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

+51-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using FluentAssertions;
1+
using System;
2+
using System.Collections.Generic;
3+
using FluentAssertions;
24
using System.Reflection;
35
using NUnit.Framework;
46
using Nest.Tests.MockData.Domain;
@@ -198,6 +200,54 @@ public void TestSortDescendingOnSortField()
198200
Assert.True(json.JsonEquals(expected), json);
199201
}
200202

203+
[Test]
204+
public void TestSortMultiWithParams()
205+
{
206+
var s = new SearchDescriptor<ElasticsearchProject>()
207+
.From(0)
208+
.Size(10)
209+
.SortMulti(sort => sort.OnField(f => f.Name.Suffix("sort")).Order(SortOrder.Descending),
210+
sort => sort.OnField(f => f.Content.Suffix("test")).Order(SortOrder.Ascending));
211+
212+
var json = TestElasticClient.Serialize(s);
213+
var expected = @"
214+
{
215+
from: 0,
216+
size: 10,
217+
sort: [
218+
{ ""name.sort"" : { order: ""desc"" } },
219+
{ ""content.test"" : { order: ""asc"" } }
220+
]
221+
}";
222+
Assert.True(json.JsonEquals(expected), json);
223+
}
224+
225+
[Test]
226+
public void TestSortMultiWithEnumerable()
227+
{
228+
var sorts = new []
229+
{
230+
new SortFieldDescriptor<ElasticsearchProject>().OnField(f => f.Name.Suffix("sort")).Order(SortOrder.Descending),
231+
new SortFieldDescriptor<ElasticsearchProject>().OnField(f => f.Content.Suffix("test")).Order(SortOrder.Ascending)
232+
};
233+
234+
var s = new SearchDescriptor<ElasticsearchProject>()
235+
.From(0)
236+
.Size(10)
237+
.SortMulti(sorts);
238+
var json = TestElasticClient.Serialize(s);
239+
var expected = @"
240+
{
241+
from: 0,
242+
size: 10,
243+
sort: [
244+
{ ""name.sort"" : { order: ""desc"" } },
245+
{ ""content.test"" : { order: ""asc"" } }
246+
]
247+
}";
248+
Assert.True(json.JsonEquals(expected), json);
249+
}
250+
201251
[Test]
202252
public void TestSortGeo()
203253
{

0 commit comments

Comments
 (0)