NOTE: You are looking at documentation for an older release. For the latest information, see the current release documentation.
Sort Usageedit
Allows to add one or more sort on specific fields. Each sort can be reversed as well.
The sort is defined on a per field level, with special field name for _score
to sort by score.
Fluent DSL exampleedit
s => s .Sort(ss => ss .Ascending(p => p.StartedOn) .Descending(p => p.Name) .Descending(SortSpecialField.Score) .Ascending(SortSpecialField.DocumentIndexOrder) .Field(f => f .Field(p => p.Tags.First().Added) .Order(SortOrder.Descending) .MissingLast() .UnmappedType(FieldType.Date) .Mode(SortMode.Average) .Nested(n => n .Path(p => p.Tags) .Filter(q => q.MatchAll()) ) ) .Field(f => f .Field(p => p.NumberOfCommits) .Order(SortOrder.Descending) .Missing(-1) ) .GeoDistance(g => g .Field(p => p.LocationPoint) .DistanceType(GeoDistanceType.Arc) .Order(SortOrder.Ascending) .Unit(DistanceUnit.Centimeters) .Mode(SortMode.Min) .Points(new GeoLocation(70, -70), new GeoLocation(-12, 12)) ) .GeoDistance(g => g .Field(p => p.LocationPoint) .Points(new GeoLocation(70, -70), new GeoLocation(-12, 12)) ) .Script(sc => sc .Type("number") .Ascending() .Script(script => script .Source("doc['numberOfCommits'].value * params.factor") .Params(p => p.Add("factor", 1.1)) ) ) )
Object Initializer syntax exampleedit
new SearchRequest<Project> { Sort = new List<ISort> { new SortField { Field = "startedOn", Order = SortOrder.Ascending }, new SortField { Field = "name", Order = SortOrder.Descending }, new SortField { Field = "_score", Order = SortOrder.Descending }, new SortField { Field = "_doc", Order = SortOrder.Ascending }, new SortField { Field = Field<Project>(p => p.Tags.First().Added), Order = SortOrder.Descending, Missing = "_last", UnmappedType = FieldType.Date, Mode = SortMode.Average, Nested = new NestedSort { Path = Field<Project>(p => p.Tags), Filter = new MatchAllQuery() } }, new SortField { Field = Field<Project>(p => p.NumberOfCommits), Order = SortOrder.Descending, Missing = -1 }, new GeoDistanceSort { Field = "locationPoint", Order = SortOrder.Ascending, DistanceType = GeoDistanceType.Arc, GeoUnit = DistanceUnit.Centimeters, Mode = SortMode.Min, Points = new[] { new GeoLocation(70, -70), new GeoLocation(-12, 12) } }, new GeoDistanceSort { Field = "locationPoint", Points = new[] { new GeoLocation(70, -70), new GeoLocation(-12, 12) } }, new ScriptSort { Type = "number", Order = SortOrder.Ascending, Script = new InlineScript("doc['numberOfCommits'].value * params.factor") { Params = new Dictionary<string, object> { { "factor", 1.1 } } } } } }
Example json output.
{ "sort": [ { "startedOn": { "order": "asc" } }, { "name": { "order": "desc" } }, { "_score": { "order": "desc" } }, { "_doc": { "order": "asc" } }, { "tags.added": { "missing": "_last", "order": "desc", "mode": "avg", "nested": { "path": "tags", "filter": { "match_all": {} } }, "unmapped_type": "date" } }, { "numberOfCommits": { "missing": -1, "order": "desc" } }, { "_geo_distance": { "locationPoint": [ { "lat": 70.0, "lon": -70.0 }, { "lat": -12.0, "lon": 12.0 } ], "order": "asc", "mode": "min", "distance_type": "arc", "unit": "cm" } }, { "_geo_distance": { "locationPoint": [ { "lat": 70.0, "lon": -70.0 }, { "lat": -12.0, "lon": 12.0 } ] } }, { "_script": { "order": "asc", "type": "number", "script": { "params": { "factor": 1.1 }, "source": "doc['numberOfCommits'].value * params.factor" } } } ] }
Nested sort usageedit
In Elasticsearch 6.1.0+, using nested_path
and nested_filter
for sorting on fields mapped as
nested
types is deprecated. Instead, you should use the nested
sort instead.
s => s .Sort(ss => ss .Field(f => f .Field(p => p.Tags.First().Added) .Order(SortOrder.Descending) .MissingLast() .UnmappedType(FieldType.Date) .Mode(SortMode.Average) .Nested(n => n .Path(p => p.Tags) .Filter(ff => ff .MatchAll() ) .MaxChildren(50) ) ) )
Object Initializer syntax exampleedit
new SearchRequest<Project> { Sort = new List<ISort> { new SortField { Field = Field<Project>(p => p.Tags.First().Added), Order = SortOrder.Descending, Missing = "_last", UnmappedType = FieldType.Date, Mode = SortMode.Average, Nested = new NestedSort { Path = Field<Project>(p => p.Tags), Filter = new MatchAllQuery(), MaxChildren = 50 } } } }
Example json output.
{ "sort": [ { "tags.added": { "missing": "_last", "order": "desc", "mode": "avg", "nested": { "path": "tags", "filter": { "match_all": {} }, "max_children": 50 }, "unmapped_type": "date" } } ] }