ES的默认排序是根据相关性分数排序,如果我们想根据查询结果中的指定字段排序,需要使用sort Processors处理。
sort语法:
GET /{索引名}/_search
{
"query": {
...查询条件....
},
"sort": [
{
"{Field1}": { // 排序字段1
"order": "desc" // 排序方向,asc或者desc, 升序和降序
}
},
{
"{Field2}": { // 排序字段2
"order": "desc" // 排序方向,asc或者desc, 升序和降序
}
}
....多个排序字段.....
]
}
sort子句支持多个字段排序,类似SQL的order by。
例子1:
GET /order_v2/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"order_no": {
"order": "desc"
}
},
{
"shop_id": {
"order": "asc"
}
}
]
}
查询order_v2索引的所有结果,结果根据order_no字段降序,order_no相等的时候,再根据shop_id字段升序排序。
类似SQL:
select * from order_v2 order by order_no desc, shop_id asc
例子2:
GET /order_v2/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"user.id": { // 嵌套json对象,使用 点 连接字段名即可
"order": "desc"
}
}
]
}