Elasticsearch搜索排序实战:时间衰减函数(Decay Function)评分优化全解析
@[TOC](Elasticsearch搜索排序实战:时间衰减函数(Decay Function)评分优化全解析)
🌺The Begin🌺点点关注,收藏不迷路🌺 |
前言
在内容搜索、电商推荐、新闻资讯、短视频、社区帖子等几乎所有搜索业务中,都有一个共同的排序需求:
在匹配关键词的前提下,越新的文档权重越高,旧文档逐步降权。
但直接按时间倒序排序会忽略相关性,而单纯靠关键词评分又会让老旧热帖排在前面。
Elasticsearch 提供的衰减函数(Decay Function)就是专门解决这个问题的神器,能实现新内容加权、老内容平滑降权的效果。
本文将从原理、流程图、核心参数、实战代码、业务场景全方位讲解,带你彻底掌握时间衰减评分,让搜索结果更符合用户习惯。
一、什么是时间衰减(Decay Function)?
1.1 定义
衰减函数是 Elasticsearch 内置的评分函数,用于根据数值字段(如时间、距离、价格)让文档评分随着数值偏离中心点而逐渐下降。
时间衰减 = 越新得分越高,随时间推移得分平滑降低
1.2 适用业务场景
- 新闻/文章:最新发布优先
- 电商商品:新品加权
- 帖子/短视频:新内容权重高
- 招聘/公告:最新优先
- 任何“新内容比旧内容好”的业务
1.3 时间衰减评分流程(可视化)
二、ES 支持的 3 种衰减函数
| 函数 | 曲线特点 | 适用场景 |
|---|---|---|
| gauss(高斯衰减) | 平滑缓慢下降,最自然 | 时间衰减首选 |
| exp(指数衰减) | 下降极快 | 需要快速降权 |
| linear(线性衰减) | 直线下降 | 简单业务 |
结论:时间衰减 99% 场景使用 gauss(高斯)
三、高斯时间衰减函数完整语法
3.1 基础模板
GET/article/_search{"query":{"function_score":{"query":{"match":{"title":"Elasticsearch"}},"functions":[{"gauss":{"publish_time":{"origin":"now","scale":"7d","offset":"1d","decay":0.5}}}],"boost_mode":"multiply"}}}3.2 四大核心参数(必须理解)
origin:中心点
时间中心点,now代表现在
离它越近得分越高scale:衰减规模
衰减速度7d= 7天30d= 30天
scale 越大,衰减越慢
offset:偏移量(保护期)
在偏移时间内不衰减,得满分1d= 24小时内不衰减
保护新内容不被降权
decay:衰减系数
超过 scale 后的得分倍率
默认 0.5
越小衰减越快
四、参数含义直观解释(秒懂)
origin: "now" → 以现在为最优时间 offset: "1d" → 1天内发布的内容:得满分 scale: "7d" → 从第1天到第8天,开始衰减 decay: 0.5 → 7天后得分变为原来的 0.5时间得分曲线:
- 0~1天:得分 1.0(满分)
- 8天:得分 0.5
- 16天:得分 0.25
- 越老越低
五、时间衰减实战场景(直接复制使用)
场景 1:新闻/文章(24小时内不衰减)
"gauss":{"publish_time":{"origin":"now","offset":"1d","scale":"7d","decay":0.5}}场景 2:电商新品(7天内加权)
"gauss":{"create_time":{"origin":"now","offset":"7d","scale":"30d","decay":0.4}}场景 3:短视频/帖子(快速衰减)
"gauss":{"post_time":{"origin":"now","offset":"6h","scale":"2d","decay":0.3}}六、时间衰减 + 关键词匹配 + 业务评分(生产最强模板)
企业级最常用搜索模板:
关键词匹配 + 时间衰减 + 销量/热度加权
GET/shop/_search{"query":{"function_score":{"query":{"multi_match":{"query":"手机","fields":["title^3","desc^1"],"type":"best_fields","tie_breaker":0.3}},"functions":[{"gauss":{"publish_time":{"origin":"now","offset":"1d","scale":"7d","decay":0.5}}},{"field_value_factor":{"field":"sales","modifier":"log1p"}}],"boost_mode":"multiply","score_mode":"sum"}}}七、时间衰减的优势
- 不破坏关键词相关性
- 新内容优先,老内容平滑降权
- 不会出现突然掉权、跳跃排序
- 排序自然、符合用户习惯
- 性能极高,ES 内置优化
八、最佳实践总结
- 时间衰减优先使用gauss
- offset设置新内容保护时间
- scale根据业务热度周期设置
- 必须与function_score一起使用
- boost_mode=multiply是最优组合方式
九、总结
Elasticsearch 时间衰减函数(Decay Function)是新内容优先排序的官方最优方案,能让搜索结果同时满足:
关键词相关 + 发布时间新 + 排序平滑自然
- gauss:最适合时间衰减
- origin=now:以当前时间为最优
- offset:新内容保护期
- scale:衰减速度
- decay:衰减倍率
掌握时间衰减,你的搜索排序将达到企业级标准。
总结
- 时间衰减让新文档得分高、老文档得分平滑下降
- gauss是时间衰减最常用函数
- 四大参数:origin、offset、scale、decay
- 必须在function_score中使用
- 生产最佳实践:关键词匹配 + 时间衰减 + 业务评分
🌺The End🌺点点关注,收藏不迷路🌺 |
