Elasticsearch排序

Elasticsearch排序

Elasticsearch 的查询默认情况下,是按照 _score 降序排序的,然而,某些情况下,可能没有有用的 _score,比如说 filter,这时候我们可以自定义排序规则。

自定义排序规则

语法

GET /indexname/_search { "query": { }, "sort": [ { "field": { "order": "asc|desc" } } ] }

说明

我们使用 sort 指定排序规则。

案例

自定义排序规则

我们在 Kibana 的控制台上,输入以下代码,新建一个文档

PUT /haicodernet/_doc/1 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

32_Elasticsearch自定义排序规则.png

我们看到,此时我们创建文档成功了,现在,我们再次输入以下代码,再次创建一条文档:

PUT /haicodernet/_doc/2 { "index":"www.haicoder.net", "name" : "server", "desc" : "server module", "categorys" : 10, "author" : "cainiao pei", "tags": [ "server", "python" ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

33_Elasticsearch自定义排序规则.png

同样,我们再次创建一条记录,使用如下命令:

PUT /haicodernet/_doc/3 { "index":"www.haicoder.net", "name" : "tools", "desc" : "tools module", "categorys" : 15, "author" : "cainiao pei", "tags": [ "tools", "vim" ] }

即,我们再次成功创建了一个文档,现在,我们使用 query 查询 author 字段为 “cainiao pei” 的记录,具体命令如下:

GET /haicodernet/_search { "query": { "match": { "author" : "cainiao pei" } } }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

34_Elasticsearch自定义排序规则.png

我们看到,一共返回了两条记录,并且默认是按照 socre 排序的,此时 categorys 为 10 的记录在 categorys 为 15 的记录的前面,现在,我们自定义排序规则,按照 categorys 降序排序,具体命令如下:

GET /haicodernet/_search { "query": { "match": { "author" : "cainiao pei" } }, "sort": [ { "categorys": { "order": "desc" } } ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

35_Elasticsearch自定义排序规则.png

我们看到,这次返回的记录是按照 categorys 降序排序的了。

Elasticsearch排序总结

Elasticsearch 的查询默认情况下,是按照 _score 降序排序的,然而,某些情况下,可能没有有用的 _score,比如说 filter,这时候我们可以自定义排序规则。