ElasticSearch自定义算分排序(Function Score Query)

发布时间:2024年01月03日

?使用 function score query,可以修改文档的相关性算分 (query score),根据新得到的算分排序。

目录

Function Score Query?

?案例


?

Function Score Query?

几种默认的计算分值的函数:

  • Weight:为每一个文档设置一个简单而不被规范化的权重
  • Field Value Factor:使用该数值来修改_socre,例如将"热度"和"点赞数"作为算分的参考因素
  • Random Score:为每一个用户使用一个不同的,随机算分结果
  • 衰减函数:以某个字段的值为标准,距离某个值越近,得分越高
  • Script Score:自定义脚本完全控制所需逻辑
    ?

GET? ?/hotel/_search

{

????????"query":{

????????????????"function_score": {

????????????????????????"query": { "match": {??"al":"外滩" } },? //原始查询条件,搜索文档并根据相关性打分(query score)

????????????????????????"functions":[

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
????????????????????????????????????????"filter": { "term" : { "id":"1" }},? //过滤条件,符合条件的文档才会被重新算分

????????????????????????????????????????"weight":10? //?算分函数,算分函数的结果称为function score,将来会与queryscore运算,得到新算分,常见的算分函数有:

????????????????????????????????????????????????weight:给一个常量值,作为函数结果 (function score);

????????????????????????????????????????????????field_value_factor:用文档中的某个字段值作为函数结果;

????????????????????????????????????????????????random_score:随机生成一个值,作为函数结果;

????????????????????????????????????????????????script_score:自定义计算公式,公式结果作为函数结果;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ],
????????????????????????"boost_mode": "multiply"? ?//加权模式,定义function score与query score的运算方式,包括:

????????????????multiply:两者相乘。默认。

????????????????replace:用function store 春换query score

????????????????其它:sum、avg、max、min

????????????????}

? ? ? ? }

}

?案例

题目1:给“如家”这个品牌的酒店排名靠前一些??

分析如下

  • 哪些文档需要算分加权?

????????品牌为如家的酒店

  • 算分函数是什么?

????????weight就可以

  • 加权模式是什么?

????????求和??

代码示例

GET? ?/hotel/_search

{

????????"query":{

????????????????"function_score": {

????????????????????????"query":{? ?????????//...????????? ?},

????????????????????????"functions" : [? ? ? ? ? ? ? ? ? ? ? ? ? ?// 算分函数
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

????????????????????????????????????????"filter": {? ? ? ? ? ? ? ? ? ? // 满足的条件,品牌必须是如家

????????????????????????????????????????"term": {

????????????????????????????????????????????????"brand":"如家"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },?

????????????????????????????????"weight" : 2? ? ? ? ? ? ? ? ? ? ? ?// 算分权重为2

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ],
????????????????????????"boost_mode":"sum"????????????????// 求和

? ? ? ? ? ? ? ? }

? ? ? ? }

}

文章来源:https://blog.csdn.net/m0_60769905/article/details/135356289
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。