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

news/2025/2/11 23:03:06/

 使用 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"                // 求和

                }

        }

}


http://www.ppmy.cn/news/1290747.html

相关文章

微同城生活源码系统:专业搭建本地生活服务平台 附带完整的安装部署教程

随着移动互联网的普及,人们越来越依赖手机进行日常生活中的各种活动,包括购物、餐饮、娱乐等。而传统的本地生活服务平台往往存在着功能单一、用户体验差等问题,无法满足用户日益增长的需求。因此,开发一款功能强大、易用性强的本…

解释data block , extent 和 segment的区别

在数据库管理系统中,Data Block、Extent和Segment是用于描述和管理存储空间的三种不同级别的单位。它们之间的主要区别如下: Data Block(数据块): Data Block是数据库中最小的逻辑存储单位,通常也是数据实际…

服务端开发中的数据库交互与数据存储

随着互联网的发展,服务端开发在构建强大的应用程序中扮演着至关重要的角色。在这个过程中,与数据库的高效交互和数据存储变得尤为关键。本文将探讨在服务端开发中如何处理与数据库的交互以及有效地进行数据存储。 1. 数据库的选择 在开始服务端开发之前…

计算机网络【EPOLL 源码详解】

IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…

Redis命令---List篇

目录 1.Redis Lindex 命令 - 通过索引获取列表中的元素简介语法可用版本: > 1.0.0返回值: 列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil 。 示例 2.Redis Rpush 命令 - 在列表中添加一个或多个值简介语法可用版本: > 1.0.0返…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…

22 闪烁按钮

效果演示 实现了一个按钮的样式&#xff0c;包括背景颜色、边框、圆角、点击效果等。当鼠标悬停在按钮上时&#xff0c;按钮的背景颜色和文字颜色会发生变化&#xff0c;同时按钮会出现闪烁的效果。 Code <button class"btn"><svg height"24" wi…

c++期末考题笔试来咯

最后一道大题题目再现 写一个person类&#xff0c;有姓名&#xff0c;性别&#xff0c;年龄。然后在此基础上派生出教师类和学生类。教师类增加了以下数据&#xff1a;工号&#xff0c;职称&#xff0c;工资。学生类增加了以下数据成员&#xff1a;学号&#xff0c;专业&#…