查询二次评分
即对查询结果中的部分文档(top-N)进行第二次评分,改变排序顺序。此功能可以为定制业务逻辑提供可能,但是search_type是scan或者count时,不能使用二次评分。
下面是一个简单的查询例子
{
"fields":["a","b"],
"query":{
"match_all":{ }
},
"rescore":{
"query":{
"rescore_query":{
"function_score":{
"query":{
"match_all":{}
}
},
"script_score":{
"script":"doc['c'].value"
}
}
}
}
}
二次评分参数
可对rescore对象中的查询使用下面的这些参数
- window_size(默认from,size参数和):该参数指定了每个shard中需要二次评分的文档个数
- query_weight(默认是1):第一个查询的得分将乘以该参数值,之后再与二次评分查询得分相加
- rescore_query_weight(默认是1):在与第1个查询得分相加之前,二次评分查询得分将乘以该参数值
最终得分公式:original_query_score * query_weight + rescore_query_score * rescore_query_weight
评分模式
默认情况下,是两个评分之和,设置score_mode改变模式
- total:两个查询评分之和
- multiply:两个查询得分之积
- avg:两个查询得分的平均值
- max
- min
结语
因为二次评分只能改变返回结果中top-n个文档的排序(局部),所以并不能改变返回结果第1页的排序结果(第1页的概念应该是全局的),另外,二次评分不能与排序结合使用,排序在重新打分之前就结束了。