0%

查询二次评分

查询二次评分

Elasticsearch中提供了查询二次评分机制,能对查询的返回文档的前若干个文档重新打分。

其过程是先取得某个查询的命中文档的前N个,然后执行某个公式为这些文档重新打分

如下示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"query": {
"match_all": {}
},
"rescore": {
"query": {
"rescore_query": {
"function_score": {
"query": {
"match_all": {}
},
"script_score": {
"script": "doc['publishTime'].value"
}
}
}
}
}
}

此时文档的得分就会变成publishTime字段的值再加上原本查询的得分

二次评分参数

  • window_size 默认为from、size之和,该参数指定了每个shard中需要二次评分的文档个数
  • query_weight 默认为1,第1个查询的得分将乘以该参数,之后再与二次评分查询得分相加
  • rescore_query_weight 默认为1,在与第1个查询得分相加之前,二次评分查询得分将乘以该参数

文档最终得分为

1
原始得分 * query_weight + rescore_query_weight * 二次查询得分

默认情况下文档得分为两个查询得分之和,也可以使用score_mode来改写评分模式

  • total 两个查询得分之和
  • multiply 两个查询得分之积
  • avg 两个查询得分的平均值
  • max 两个查询得分中的最大值
  • min 两个查询得分中的最小值

欢迎关注我的其它发布渠道