在商品搜索业务中经常会基于一些策略进行商品重排序,也就是在搜索相关度的基础上加入销量或者价格的排序因素
为了实现上述目标,我们一般会基于function_score或script_score进行策略打分,但这种语法在高并发情况下会造成服务器CPU负载升高,为了解决此类问题,今天我们引入另一种重排序机制--rescore
rescore重排序性能可以提升10-50倍,原因是rescore在重拍过程中并没有真正对全量数据进行二次打分,而是在主查询基础之上进行了顶部开窗的方式,先通过主查询的排序过滤出顶部数据,rescore通过window_size参数设置取数范围,只对该范围的数据进行二次排序
- 一个简单的例子
"query": {
"bool": {
"filter": [
{
"term": {
"is_use": "1"
}
}
],
"must": [
{
"bool": {
"should": [
{
"multi_match": {
"query": "邀请函",
"fields": [
"title^1.0"
],
"operator": "and",
"type": "most_fields",
"analyzer": "ik_smart"
}
}
]
}
}
],
"should": [],
"must_not": [ ]
}
},
"rescore": [
{
"query": {
"rescore_query" : {
"function_score" : {
"functions": [
]
}
}
},
"window_size": 50
}
]
-
参数说明
-
window_size
二次排序商品的数量 -
query_weight
在生成_score得分时主查询打分权重 -
rescore_query_weight
在生成_score得分时rescore query打分权重 -
score_model
主查询与rescore融合方式,支持:multiply、total、avg、min、max
网友评论