最近,在公司学习ES的使用,导师给了个题目,如何对一个文档先计算分数,用分数进行排序,在分数相同的情况下再按照别的字段(如时间)进行排序,为此,从来没接触过ES的我开启了艰难的学习之路
本文参考自 ES权威指南(中文版)
以下是目录:
1、相关性算分
相关性算分描述了一个文档和查询语句的匹配程度,ES会对每个查询到的文档进行自动打分,打分的本质就是排序,ES会默认按照_score进行降序排序,分数更高(匹配程度高)的文档将排在前面。
ES5之前默认使用TF-IDF算法进行计算,ES6之后开始使用它的改进版BM25算法,这两个算法大致都是通过计算词频和文档频率、逆文档频率等对文档进行相关性算分。文章来源:https://www.toymoban.com/news/detail-447802.html
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: 通过自定义脚本计算分值
示例如下:文章来源地址https://www.toymoban.com/news/detail-447802.html
GET test/_search
{
"query":{
"function_score":{
"query":{
"terms":{
"sys
到了这里,关于ES:先按相关性分数进行排序,分数相同时再按其他字段排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!