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.LastActivity)
.Order(SortOrder.Descending)
.MissingLast()
.UnmappedType(FieldType.Date)
.Mode(SortMode.Average)
.NestedPath(p => p.Tags)
.NestedFilter(q => q.MatchAll())
)
.GeoDistance(g => g
.Field(p => p.Location)
.DistanceType(GeoDistanceType.Arc)
.Order(SortOrder.Ascending)
.Unit(DistanceUnit.Centimeters)
.Mode(SortMode.Min)
.PinTo(new GeoLocation(70, -70), new GeoLocation(-12, 12))
)
.Script(sc => sc
.Type("number")
.Ascending()
.Script(script => script
.Inline("doc['numberOfCommits'].value * factor")
.Lang("groovy")
.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.LastActivity),
Order = SortOrder.Descending,
Missing = "_last",
UnmappedType = FieldType.Date,
Mode = SortMode.Average,
NestedPath = Field<Project>(p=>p.Tags),
NestedFilter = new MatchAllQuery(),
},
new GeoDistanceSort
{
Field = "location",
Order = SortOrder.Ascending,
DistanceType = GeoDistanceType.Arc,
GeoUnit = DistanceUnit.Centimeters,
Mode = SortMode.Min,
Points = new [] {new GeoLocation(70, -70), new GeoLocation(-12, 12) }
},
new ScriptSort
{
Type = "number",
Order = SortOrder.Ascending,
Script = new InlineScript("doc['numberOfCommits'].value * factor")
{
Lang = "groovy",
Params = new Dictionary<string, object>
{
{ "factor", 1.1 }
}
}
}
}
}Example json output.
{
"sort": [
{
"startedOn": {
"order": "asc"
}
},
{
"name": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
},
{
"_doc": {
"order": "asc"
}
},
{
"lastActivity": {
"missing": "_last",
"order": "desc",
"mode": "avg",
"nested_filter": {
"match_all": {}
},
"nested_path": "tags",
"unmapped_type": "date"
}
},
{
"_geo_distance": {
"location": [
{
"lat": 70.0,
"lon": -70.0
},
{
"lat": -12.0,
"lon": 12.0
}
],
"order": "asc",
"mode": "min",
"distance_type": "arc",
"unit": "cm"
}
},
{
"_script": {
"order": "asc",
"type": "number",
"script": {
"params": {
"factor": 1.1
},
"inline": "doc['numberOfCommits'].value * factor",
"lang": "groovy"
}
}
}
]
}