【ElasticSearch】ElasticSearch 中使用衰减函数来完美你的搜索结果

2023-11-10

在这里插入图片描述

1.概述

转载:ElasticSearch 中使用衰减函数来完美你的搜索结果

最近的项目在原有的搜索需求增加功能

  • ElasticSearch 7.6 (请注意,大版本不同可能参数不同)

原有搜索:简单的标题+正文 全文索引
新加功能:在原有的基础上,更加完善排序结果。可以由多种因素控制。发布时间(发布太久的了得分需下降)后台给予的权重值(权重值越高越好)热度

调研了一下文档,发现ElasticSearch完美支持这样的需求,只需要自己定义好递减函数即可。

ES 内置了衰减函数(Decay Function)的支持。对于数值、日期和地理位置类型,可以设置一个理想的值,如果实际的值越偏离这个理想值(无论是增大还是减小),就越不符合期望,分数就越低。

它支持如下参数:

  • origin:原点,该字段最理想的值,这个值可以得到满分(1.0)
  • offset:偏移量,与原点相差在偏移量之内的值也可以得到满分
  • scale:衰减规模,当值超出了原点到偏移量这段范围,它所得的分数就开始进行衰减了,衰减规模决定了这个分数衰减速度的快慢
  • decay:衰减值,该字段可以被接受的值(默认为 0.5),相当于一个分界点,具体的效果与衰减的模式有关

在这里插入图片描述

  • linear 直线衰减,在 0 分外的值都是 0 分
  • exp 衰减速度先快后慢
  • gauss 衰减速度先慢后快再慢

我的参数配置如下:

{
    "query":{
        // 使用得分函数
        "function_score":{
            // 查询的关键字
            "query":{
                "multi_match":{
                    // 关键字
                    "query":"博客",
                    // title 的权重是 body 的 "10"倍,具体可自行查阅官方文档的计算方式
                    "fields":[
                        "title^10",
                        "body"
                    ]
                }
            },
            // 函数得分如何作用于原始得分(这里是相乘)
            "boost_mode":"multiply",
            // 函数的总得分(现在是所有得分累加)
            "score_mode":"sum",
            "functions":[
                // 使用高斯函数, 原始日期是 2020-04-27
                // 距离原始日期 30 天之内的都能得到满分(以前未来日期都算),也就是 1
                // 距离原始日期 30 ~ 90 天的使用高斯函数得分
                // 距离原始日期超过 90 天(30+60) 的都得最低分,也就是 0.5
                {
                    "gauss":{
                        "created_date":{
                            "origin":"2020-04-27",
                            "offset":"30d",
                            "scale":"60d",
                            "decay":0.5
                        }
                    },
                    "weight": 1
                },
                // 使用线性函数,所有参数和高斯一致,只不过衰减程度不一样
                // 值的注意的是线性函数有可能得 0 分
                {
                    "linear":{
                        "hot_value":{
                            "origin":100,
                            "offset":10,
                            "scale":50,
                            "decay": 0.5
                        }
                    },
                    // 可设置函数的权重
                    "weight": 2
                }
            ]
        }
    }
}

引用文档:

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/query-dsl-function-score-query.html

知乎Live全文搜索之使用Elasticsearch全文搜索

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ElasticSearch】ElasticSearch 中使用衰减函数来完美你的搜索结果 的相关文章

  • 【Hadoop系列】linux下 root用户免密码登录远程主机 ssh

    SSH原理 Hadoop系列 linux SSH原理解析 操作环境 CentOS 6 5 操作对象 用户A主机和远程主机B 正文部分 斜体加粗代表linux指令 linux下 非root用户免密码登录远程主机 ssh请转至此链接 XXXXX
  • Linux CentOS7命令及命令行

    Linux CentOS7中命令及命令行是非常重要的概念 对大多数初学者来说是既熟悉又了解甚少 本文初步讨论这方面的内容 与同行者交流 一 命令 命令又称为指令 英语命令 command 可用简写cmd表示 在终端命令行中执行的一段字符 一
  • QT5.14.2+VS2017环境安装

    1 下载Qt5 14 2以及qt vs插件 1 Qt官网下载地址 操作系统是win10企业版 在目录qt下找到程序qt opensource windows x86 5 14 2 exe 在目录vsaddin下找到程序qt vsaddin
  • 时间基础概念及Linux中的时间函数

    时间基础概念及Linux中的时间函数 时间相关概念 GMT 时间 UTC 时间 时区 Time Zone 夏令时 DST 本地时间 localtime Linux 系统中的时间 时钟基础概念 系统节拍数 jiffies Linux系统查看时
  • 生产者与消费者问题?

    生产者消费者模式是并发 多线程编程中经典的设计模式 简单来看 就是一个类负责生产 一个类负责消费 举例来说 一个变量 生产者不断增加这个变量 消费者不断减少这个变量 在互联网应用中 抢票机制就是应用了该模式 比如大麦网演唱会门票抢票 123
  • linux作业后台管理

    参考 http blog itpub net 26736162 viewspace 2142674 常用命令 参考http blog chinaunix net uid 26785297 id 3375270 html fg bg jobs
  • 一文搞清到底什么是 .NET?

    现在各种 NET 满天飞 别说新手了 连我这样的老手都差点被绕进去 到底什么是 NET 呢 通俗易懂 什么是 NET 什么是 NET Framework 什么是 NET Core 这篇文章好长呀 不知道你看完了没有 其实最关键的是核心的几个
  • 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。(C语言)基础版

    输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔 输出格式 在一行中输出两个输入序列的交集序列 数字间用空格分开 结尾不能有多余空格 若新链表为空 输出NULL in
  • session机制详解以及session的相关应用

    session是web开发里一个重要的概念 在大多数web应用里session都是被当做现成的东西 拿来就直接用 但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求 当碰到这样的情况时候我们需要更加深入的理解sessi
  • layui 前端下载文件方法

    文件下载 function downLoadFile ids name 获取token var tableName layui data setter tableName 创建下载请求 var oReq new XMLHttpRequest
  • 学计算机的的用87键键盘可以吗,键盘87和108键区别

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 键盘87和108键区别是 1 87键的键盘有87个按键 108键的键盘有108个按键 2 108键的键盘在87键键盘的基础上增加了17个数字辅助按键和4个功能键 键盘 Ke
  • 【环境配置篇】保姆级教学之Ubuntu20.04上编译OpenCV+CUDA

    保姆级教学之Ubuntu20 04上编译OpenCV CUDA 自从发了上一期在Ubuntu20 04上配置深度学习环境的视频之后 我收到了很多小伙伴的反馈 其中有不少同学私信我表示 能不能教我怎么编译OpenCV呢 但其实在Ubuntu上
  • 【微服务笔记(九)】之Feign,Feign的负载均衡与熔断

    本文章由公号 开发小鸽 发布 欢迎关注 老规矩 妹妹镇楼 一 Feign 一 概述 之前使用Ribbon的负载均衡功能 简化了远程调用时的代码 但是每次调用都需要写基本相同的代码 代码重复性高 Feign可以把Rest的请求进行隐藏 伪装成
  • 【mobx】since strict-mode is enabled,changing (observed) values without using an action is not allowed

    问题描述 在用mobx做react的状态管理工具时 异步获取数据后 虽然页面获取到了数据并且渲染 但是控制台warnning 代码如下 ChannelStore js import makeAutoObservable from mobx

随机推荐

  • Matlab:比较和合并 MAT 文件--方便高效的批量处理

    Matlab 比较和合并 MAT 文件 方便高效的批量处理 MATLAB中 我们常常需要处理大批量的数据 而在处理这些数据时经常需要将多个MAT文件进行比较和合并 本文将介绍如何使用MATLAB的相关函数实现比较和合并MAT文件 一 比较M
  • Window10运行Docker踩过的坑

    Window10运行Docker踩过的坑 摘要 1 Docker for Windows 仅支持专业版 2 docker machine启动docker时 docker里的文件没了 3 docker安装Redis时配置文件出错 最近新装系统
  • Qt: QPushButton 常用样式设置(qss)

    1 设置上边框为2个像素 样式为实线 颜色为黑色 border top 2px solid 000000 2 设置上内边距为 8px 文字向下移动 padding top 8px 3 给文字加下划线 text decoration unde
  • visual studio 2019中文乱码

    文章目录 1 编码 1 code编码 2 控制台编码 3 txt文件编码 4 控制台编码 2 中文输出 1 更改 locale 显示中文 1 cout 与 wcout 2 ofstream 与 wofstream 3 printf 和 wp
  • java switch-case练习 常见题型

    一 使用 switch 把小写类型的 char型转为大写 只转换 a b c d e 其它的输 出 other 提示 String word scan next char c word charAt 0 switch c public cl
  • sqlalchemy Connection Pool

    sqlalchemy 默認的pool size 5 pool裡存放的是在跟數據庫的的閒置連接 使用c1 engine connect 或 session scoped session sessionmaker bind engine 會創建
  • AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD

    1 Wav2Lip HD项目介绍 数字人打造中语音驱动人脸和超分辨率重建两种必备的模型 它们被用于实现数字人的语音和图像方面的功能 通过Wav2Lip HD项目可以快速使用这两种模型 完成高清数字人形象的打造 项目代码地址 github地址
  • 判断服务器芯片还是民用芯片,抢鲜看,Xeon E3-1230对比I7 2600评测

    印在包装上的规格 附带的原装风扇与桌面级完全相同 CPU正反面对比图 除了型号之外完全相同 在研究完CPU之后还有必要研究一下所支持的主板芯片组 Intel方面给予Xeon E3 1000系列所提供的芯片组分为C202 C204以及C206
  • 使用 RedisTemplate 对象的 opsForValue() 方法获取 Redis 中的值获取不到

    问题 使用 RedisTemplate 对象的 opsForValue 方法获取 Redis 中的值获取不到 详细问题 笔者代码如下 1 使用 ValueOperations 对象的 set 方法将一个键值对存储到 Redis 中 valu
  • 75-局部自定义指令——bind和update方法

    75 局部自定义指令 bind和update方法 这里通过directives指令实现
  • OPENWRT或旁路由如果不能正常使用opkg,正确上网等的一种解决方法

    家里有个n1 我刷了个openwrt做旁路由 主路由是 AC2100 莫名其妙的无法正常使用某些功能 例如opkg updae 正确上网也不行 按照之前的教训 防火墙的设置影响较大 我用的防火墙规则是自带的lan规则 如下图所示 并不满足作
  • win11安装tensorRt成功

    1 安装cuda 查看电脑cuda版本 nvidia smi 我的是11 6 下载链接 https developer nvidia com cuda 11 6 0 download archive target os Windows ta
  • 《域渗透攻防指南》签名版预售来啦

    千呼万唤始出来 终于 在广大粉丝翘首期盼下 国内首本专门讲述域内攻防的书籍 域渗透攻防指南 在2022年最后一个月和大家见面了 为了回馈粉丝的等待 让粉丝早日拿到心仪的书 特此联合机械工业出版社弄了签名版书预售活动 数量有限 仅限前500名
  • Typescript - 枚举类型 enum,详细介绍与使用教程(快速入门)

    介绍 在任何项目开发中 我们都会遇到定义常量的情况 常量就是指不会被改变的值 TS 中我们使用 const 来声明常量 但是有些取值是在一定范围内的一系列常量 比如一周有七天 比如方向分为上下左右四个方向 这时就可以使用枚举 Enum 来定
  • JavaScript-三种弹窗方式

    JavaScript 三种弹窗方式 一 alert 带内容的弹框 用法 二 confirm 带选择的弹框 用法 专门建立的学习Q q u n 731771211 分享学习方法和需要注意的小细节 不停更新最新的教程和学习技巧 从零基础开始
  • 如何在mac上运行vue项目

    本人使用的是Mac笔记本 所以搭建Vue环境的时候遇到了一些坑 在此做下记录希望可以帮到和我一样掉坑的人 都说Vue和小程序有些地方很相似 便从朋友手里要了一个Vue的项目想着尝试看看 结果项目到手才发现坑了不是一个编辑器运行就可以解决的
  • LeetCode 236. 二叉树的最近公共祖先——Python实现(递归,哈希表)

    1 直接用递归的方法 使用递归的方法 找出二叉树中两个节点的最近公共祖先 分析如下 对于两个节点p和q的公共祖先r 他们要么在r的同一边 要么在这个节点的两边 因此 只要满足这两个条件即可 也就是说 只要 f r child p and f
  • 【光伏功率预测】基于EMD-PCA-LSTM的光伏功率预测模型(Matlab代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 文献来源 4 Matlab代码 数据 文章讲解 1 概述 文献来
  • slam数据集整合

    根据大家的要求 在此整合一下常用的几个数据集 我平时话太啰嗦了 这里就简单一些 为啥编辑器的分隔线都这么萌 1 Tum数据集 这个大家用的人都知道 RGB D数据集 有很多个sequence 自带Ground truth轨迹与测量误差的脚本
  • 【ElasticSearch】ElasticSearch 中使用衰减函数来完美你的搜索结果

    1 概述 转载 ElasticSearch 中使用衰减函数来完美你的搜索结果 最近的项目在原有的搜索需求增加功能 ElasticSearch 7 6 请注意 大版本不同可能参数不同 原有搜索 简单的标题 正文 全文索引 新加功能 在原有的基