如何对搜索结果进行二次打分

2020-04-11  本文已影响0人  郭彦超

这么做一般有两个目的
1、对返回的商品做精细化排序,尤其是在通过es实现相似推荐时会被经常用到
2、固定商品结果数检索,当商品太多时,为了确保服务性能打分算法无法在全量商品进行计算,这时可取头部商品后按照新的规则进行重排序

假如用户通过搜索框检索“快闪邀请函”,我们通过rescore对召回的商品进行二次重排,将描述中包含“企业”,且商品收藏量相对比较大的商品进行提权显示:

GET search_data/_search
{
   "query" : {
      "match" : {
         "title": {
            "operator" : "and",
            "query" : "快闪邀请函"
         }
      }
   },
   "rescore" : [ {
      "window_size" : 100,
      "query" : {
         "rescore_query" : {
            "match" : {
               "desc" : {
                  "query" : "企业" 
               }
            }
         },
         "query_weight" : 0.7,
         "rescore_query_weight" : 1.2
      }
   }, {
      "window_size" : 10,
      "query" : {
         "score_mode": "multiply",
         "rescore_query" : {
            "function_score" : {
               "script_score": {
                  "script": {
                    "source": "Math.log10(doc.user_collect.value + 2)"
                  }
               }
            }
         }
      }
   } ]
}

需要注意:
1、不要在原始查询中使用sort进行排序,否则无法进行rescore查询
2、如果对搜索结果进行分页查询的话,不要试图改变window_size的值,如果改变会在进行翻页是引起数据显示的混乱

上一篇下一篇

猜你喜欢

热点阅读