ElasticSearch自定义算分排序(Function Score Query)
?使用 function score query,可以修改文档的相关性算分 (query score),根据新得到的算分排序。
目录
?
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"????????????????// 求和? ? ? ? ? ? ? ? }
? ? ? ? }
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!