“ElasticSearch查询:sort排序子句”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
 (建立内容为“category:ElasticSearch  == 关于 ==  <syntaxhighlight lang="java" highlight="">  </syntaxhighlight>”的新页面)  | 
				无编辑摘要  | 
				||
| 第2行: | 第2行: | ||
== 关于 ==  | == 关于 ==  | ||
ES 的默认排序是根据'''相关性分数'''排序,如果我们想根据查询结果中的指定字段排序,需要使用sort Processors处理。  | |||
* sort 子句支持多个字段排序,类似 SQL 的 order by。  | |||
sort语法:  | |||
<syntaxhighlight lang="JSON" highlight="">  | |||
GET /{索引名}/_search  | |||
{  | |||
   "query": {  | |||
      ...查询条件....  | |||
   },  | |||
   "sort": [  | |||
      {  | |||
         "{Field1}": { // 排序字段1  | |||
            "order": "desc" // 排序方向,asc或者desc, 升序和降序  | |||
         }  | |||
      },  | |||
      {  | |||
         "{Field2}": { // 排序字段2  | |||
            "order": "desc" // 排序方向,asc或者desc, 升序和降序  | |||
         }  | |||
      }  | |||
      ....多个排序字段.....  | |||
   ]  | |||
}  | |||
</syntaxhighlight>  | |||
示例 1:查询 order_v2 索引的所有结果,结果根据 order_no 字段降序,order_no 相等的时候,再根据 shop_id 字段升序排序。  | |||
<syntaxhighlight lang="JSON" highlight="">  | |||
GET /order_v2/_search  | |||
{  | |||
  "query": {  | |||
    "match_all": {}  | |||
  },  | |||
  "sort": [  | |||
    {  | |||
      "order_no": {  | |||
        "order": "desc"  | |||
      }  | |||
    },  | |||
    {  | |||
      "shop_id": {  | |||
        "order": "asc"  | |||
      }  | |||
    }  | |||
  ]  | |||
}  | |||
</syntaxhighlight>  | |||
类似SQL:  | |||
<syntaxhighlight lang="JSON" highlight="">  | |||
select * from order_v2 order by order_no desc, shop_id asc  | |||
</syntaxhighlight>  | |||
示例 2:  | |||
<syntaxhighlight lang="JSON" highlight="">  | |||
GET /order_v2/_search  | |||
{  | |||
  "query": {  | |||
    "match_all": {}  | |||
  },  | |||
  "sort": [  | |||
    {  | |||
      "user.id": { // 嵌套json对象,使用 点 连接字段名即可  | |||
        "order": "desc"  | |||
      }  | |||
    }  | |||
  ]  | |||
}  | |||
</syntaxhighlight>  | </syntaxhighlight>  | ||
2021年5月21日 (五) 00:12的版本
关于
ES 的默认排序是根据相关性分数排序,如果我们想根据查询结果中的指定字段排序,需要使用sort Processors处理。
- sort 子句支持多个字段排序,类似 SQL 的 order by。
 
sort语法:
GET /{索引名}/_search
{
   "query": {
      ...查询条件....
   },
   "sort": [
      {
         "{Field1}": { // 排序字段1
            "order": "desc" // 排序方向,asc或者desc, 升序和降序
         }
      },
      {
         "{Field2}": { // 排序字段2
            "order": "desc" // 排序方向,asc或者desc, 升序和降序
         }
      }
      ....多个排序字段.....
   ]
}
示例 1:查询 order_v2 索引的所有结果,结果根据 order_no 字段降序,order_no 相等的时候,再根据 shop_id 字段升序排序。
GET /order_v2/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "order_no": {
        "order": "desc"
      }
    },
    {
      "shop_id": {
        "order": "asc"
      }
    }
  ]
}
类似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"
      }
    }
  ]
}