ES:先按相关性分数进行排序,分数相同时再按其他字段排序

您所在的位置:网站首页 根据分数排序怎么排序 ES:先按相关性分数进行排序,分数相同时再按其他字段排序

ES:先按相关性分数进行排序,分数相同时再按其他字段排序

2024-07-14 07:28| 来源: 网络整理| 查看: 265

最近,在公司学习ES的使用,导师给了个题目,如何对一个文档先计算分数,用分数进行排序,在分数相同的情况下再按照别的字段(如时间)进行排序,为此,从来没接触过ES的我开启了艰难的学习之路 本文参考自 ES权威指南(中文版)

以下是目录:

文章目录 1、相关性算分 2、function_score 3、多级排序 4、示例

1、相关性算分

相关性算分描述了一个文档和查询语句的匹配程度,ES会对每个查询到的文档进行自动打分,打分的本质就是排序,ES会默认按照_score进行降序排序,分数更高(匹配程度高)的文档将排在前面。 ES5之前默认使用TF-IDF算法进行计算,ES6之后开始使用它的改进版BM25算法,这两个算法大致都是通过计算词频和文档频率、逆文档频率等对文档进行相关性算分。

2、function_score

function_score用于计算文档相关分值,它会在查询结束后对没一个匹配的文档进行一系列的重打分操作,最后以生成的分数进行排序。 如果不想使用相关性算分,可以使用constant_score,此时所有分数均会被置为1.0,constant_score一般适用于结构化数据查询。 function_score提供了几种默认的计算分值的函数: weight:设置权重,跟boost类似,区别在于weight的权重不会被规范化,当某个文档的weight为2时,最终结果就是_score * 2 ,一般来说都和filter一起使用。因为过滤器只会筛选出符合标准的文档,不会去计算文档的具体得分,所有符合条件的文档的分都是1,使用weight可以将分数替换为你想要的分数。 field_value_factor:允许使用文档中某些字段参与相关性算分 random_score: 随机得到0~1的分数 script_score: 通过自定义脚本计算分值 示例如下:

GET test/_search { "query":{ "function_score":{ "query":{ "terms":{ "system":[ "1", "2"


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3