
1、默认排序
ES是按照查询和文档的相关度进行排序的,默认是降序排列,也就是说,我们之前的查询,

可以认为是下面这样子的,。

当然,我们也可以换一个字段来进行排序,那么,就不用评分了。

全文搜索也类似的

这里有个特例查询要说明下:
match_all查询,这个查询不评分,所以,排序是默认按照创建时间排序的。match_all的官方解释如下:

所以,要对这个查询排序,需要_doc倒序即可。
2、多字段排序
多字段排序,只需将多个字段在排序中按照先后顺序写入即可。这个和我们常用的sql查询没差别。

3、影响评分的因素。
关于ES评分,还是比较复杂的,具体可以看看大神们的文章和官方文档。
我觉得比较容易理解的两个影响评分的因素是分片数量和分词器使用。
我们不纠结太细致的算法,简单粗暴可把相关度评分认为是:搜索文本的各个词条在文档的字段中出现了多少次,次数越多,越相关。搜索文本的各个词条在所有文档中出现了多少次,越多越不相关。
分片影响:es在执行查询的时候,是把请求发到分片上分别执行,因为每个分片都有一部分数据。分片在进行计算之后,将数据集合再返回出来。如果分片数少一个。那么每个分片上的数据量就变多了,那么,很可能计算的结果就不一样了。
分词影响:分词决定了搜索内容会被分结出那些词条,词条不容,当然查询结果不同