Elasticsearch搜索算法深度剖析BM25算法原理及与TF-IDF对比实战指南前言一、BM25 算法核心认知1.1 什么是 BM251.2 BM25 适用场景1.3 BM25 整体工作流程二、BM25 算法核心公式与组成部分2.1 BM25 核心公式2.2 公式中 5 大核心组件三、传统 TF-IDF 算法回顾3.1 TF-IDF 公式3.2 TF-IDF 的致命缺陷四、BM25 相比 TF-IDF 的 5 大核心改进重点改进 1词频 TF 具有**饱和机制**最核心改进改进 2加入**文档长度归一化**改进 3IDF 计算更平滑、更稳定改进 4可调节参数k1、b业务适配性更强改进 5抑制长文本虚假相关性五、BM25 与 TF-IDF 全方位对比表六、如何在 ES 中查看/配置 BM25 参数6.1 查看索引默认相似度算法6.2 自定义 BM25 参数高级调优七、为什么 ES 一定要替换成 BM25八、总结总结The Begin点点关注收藏不迷路前言在 Elasticsearch 搜索引擎中相关性算分是决定搜索结果排序是否精准的核心。在 ES 5.x 版本之前默认使用TF-IDF算法作为相关性评分标准从 5.x 版本开始官方将默认评分算法切换为BM25一直沿用至今。很多开发者在使用 ES 进行搜索开发时只知道_score是相关性分数却不了解 BM25 是什么、比 TF-IDF 好在哪里、为什么能成为现代搜索引擎的标准算法。本文将从定义、核心原理、计算公式、流程图、与 TF-IDF 的对比、改进点等维度用通俗易懂的方式深度讲解 BM25 算法帮助你彻底掌握 ES 搜索排序的底层逻辑。一、BM25 算法核心认知1.1 什么是 BM25BM25Best Match 25是一种基于概率框架的文本相关性检索算法是目前 Elasticsearch、Lucene、Solr、PostgreSQL 等主流搜索引擎/数据库的默认相关性算分算法。简单理解BM25 优化升级后的 TF-IDF它保留了 TF-IDF 的核心思想词频、逆文档频率同时解决了 TF-IDF 的天然缺陷让搜索排序更精准、更稳定。1.2 BM25 适用场景全文检索相关性排序多字段搜索权重计算长文本/短文本混合搜索企业级精准搜索业务1.3 BM25 整体工作流程用户输入查询词查询分词处理计算每个词的IDF稀有度计算文档内词频TF字段长度归一化短文本加权TF饱和处理抑制词频泛滥加权求和得到最终_score按分数从高到低排序返回结果流程说明BM25 先计算每个搜索词的稀有度权重IDF再计算词在文档中的出现频率TF加入长度归一化让短字段权重更高对 TF 做饱和限制避免关键词重复导致分数虚高最终生成相关性分数完成排序二、BM25 算法核心公式与组成部分ES 中使用的是BM25 标准公式结构清晰、可解释性强2.1 BM25 核心公式Score Σ( IDF(q) * TF(d,q) * (k1 1) / ( TF(d,q) k1 * (1 - b b * |d| / avgdl ) ) )2.2 公式中 5 大核心组件IDF(q)逆文档频率代表查询词的稀有程度越稀有的词权重越大。TF(d,q)词频代表查询词在文档中出现的次数。k1词频饱和系数ES 默认 1.2控制词频对分数的影响上限。b长度归一化系数ES 默认 0.75控制文本长度对分数的影响。|d| / avgdl文档长度 / 平均文档长度用于短文本加权。三、传统 TF-IDF 算法回顾TF-IDF 是最经典的检索算法由两部分组成3.1 TF-IDF 公式Score TF(q,d) × IDF(q)TF词在文档中出现次数越多分数越高IDF词在全库中越少分数越高3.2 TF-IDF 的致命缺陷词频无上限会无限增长关键词重复越多分数越高容易被恶意刷词干扰。不考虑文档长度长文章容易因为词多而排名虚高。无饱和机制词频达到一定次数后相关性不再提升但分数仍在涨。长文本权重过高正文长文本分数 标题短文本不符合搜索习惯。四、BM25 相比 TF-IDF 的 5 大核心改进重点BM25 完全解决了 TF-IDF 的缺陷这也是 ES 官方切换默认算法的根本原因。改进 1词频 TF 具有饱和机制最核心改进TF-IDF词频越高分数无限上涨BM25词频达到一定阈值后分数不再增长趋于平稳效果避免关键词堆砌导致排名异常搜索更公平改进 2加入文档长度归一化BM25 会判断文档是长还是短文档越短权重越高效果标题短匹配 正文长匹配符合人类搜索习惯改进 3IDF 计算更平滑、更稳定BM25 优化了 IDF 公式避免极端值对高频词、低频词的权重分配更合理改进 4可调节参数k1、b业务适配性更强k1控制词频影响程度b控制长度归一化强度可根据业务场景动态调优TF-IDF 不支持改进 5抑制长文本虚假相关性TF-IDF长文章容易因为词多排第一BM25自动降低长文本权重避免“水文章”排在前面五、BM25 与 TF-IDF 全方位对比表对比维度TF-IDF传统算法BM25现代算法ES 默认版本5.x 之前5.x ~ 最新版词频机制无上限无限增长有饱和上限文档长度不考虑长度归一化短文本加权可调参数无k1、b 可调优抗干扰差易被关键词堆砌影响强稳定可靠排序精度一般高企业级标准适用场景简单检索生产环境、精准搜索六、如何在 ES 中查看/配置 BM25 参数6.1 查看索引默认相似度算法GET/your_index/_settings?include_defaultstrue结果中会显示similarity: { default: BM25 }6.2 自定义 BM25 参数高级调优PUT/my_index{settings:{index:{similarity:{default:{type:BM25,k1:1.2,b:0.75}}}}}标题类短字段b调小如 0.5正文类长字段b调大如 0.8七、为什么 ES 一定要替换成 BM25TF-IDF 太容易被作弊重复关键词就能刷排名BM25 更符合真实搜索习惯标题匹配优先、短文本优先长文本不会虚高大幅提升搜索体验工业级标准全球所有主流搜索引擎都使用 BM25八、总结BM25 是基于概率模型的新一代相关性检索算法是 TF-IDF 的全面升级版也是 Elasticsearch 5.x 之后的默认算分核心。它保留了 TF-IDF 的词频、稀有度思想同时新增词频饱和、长度归一化、可调参数三大核心能力彻底解决了 TF-IDF 的缺陷让搜索结果更精准、更稳定、更符合用户习惯。对于搜索开发工程师而言理解 BM25 是进阶 ES 高手、优化搜索相关性、解决排序问题的必备基础。总结BM25是 ES 5.x 默认相关性算分算法基于概率模型BM25 继承 TF-IDF 思想但解决了其所有缺陷最关键改进词频饱和机制 文档长度归一化优势排序精准、抗干扰、可调参、适合生产环境结论现代搜索引擎已全面抛弃 TF-IDF全面使用 BM25The End点点关注收藏不迷路