科普一下Elasticsearch中BM25算法的使用

news2025/1/11 18:32:18
alt

首先还是先了解几个概念,Elasticsearch是一个开源的分布式搜索和分析引擎,它使用一系列算法来计算文档的相关性分数(relevance score)。这些算法用于确定查询与文档的匹配程度,以便按相关性对搜索结果进行排序。以下是Elasticsearch中常用的算分算法:

  1. 词频(Term Frequency,TF):TF算法根据查询词在文档中出现的频率来计算分数。出现频率越高,分数越高。

  2. 逆文档频率(Inverse Document Frequency,IDF):IDF算法根据查询词的全局频率来计算分数。对于在许多文档中都出现的常见词,IDF值较低,分数较低;而对于在少数文档中出现的罕见词,IDF值较高,分数较高。

  3. 字段长度(Field Length):字段长度算法根据文档中字段的长度来计算分数。较短的字段可能更相关,因此分数较高。

  4. 文档频率(Document Frequency):文档频率算法根据查询词在文档集合中出现的文档数来计算分数。在较少的文档中出现的词可能更相关,因此分数较高。

  5. 向量空间模型(Vector Space Model):向量空间模型算法将文档和查询表示为向量,并计算它们之间的相似度。通过计算余弦相似度等度量,可以得到文档与查询的相关性分数。

  6. BM25(Best Match 25):BM25是一种基于TF和IDF的改进算法,它考虑了词频和文档频率,并引入了一些调整参数,以提高搜索结果的质量。

下面展示修改修改BM25相关参数

要调整BM25算法的参数,您可以通过修改Elasticsearch索引的相关性设置来实现。下面是一个示例,展示了如何使用Elasticsearch的API来调整BM25算法的参数:

  1. 设置BM25的参数:需要注意的是,设置该操作时,索引必须是关闭状态

    这块不了解的可以参考之前的一篇关于Elasticsearch索引相关设置的文章,这篇文章详细介绍了哪些是静态索引设置,动态索引设置

    Elasticsearch 创建一个索引怎么也这么复杂:https://mp.weixin.qq.com/s/OnXeESVMreYgBvbGGR4R0g

POST your_index/_close
PUT /your_index/_settings
{
  "index": {
    "similarity": {
      "default": {
        "type""BM25",
        "b""1.2",  // 调整参数b
        "k1""1.0"  // 调整参数k1
      }
    }
  }
}

在上面的示例中,我们使用PUT请求来更新索引的设置。将"b"参数设置为1.2,将"k1"参数设置为1.0。这些参数可以根据您的需求进行调整。参数"b"控制文档长度的影响,较大的值会增加文档长度的权重;参数"k1"控制词频的影响,较大的值会增加词频的权重。

  1. 验证参数设置:
GET /your_index/_settings

使用GET请求获取索引的设置,确保参数已成功设置。

请注意,以上示例中的"your_index"是您要调整设置的索引名称。您可以根据实际情况替换为您的索引名称。

通过调整BM25算法的参数,您可以根据具体需求优化搜索结果的相关性评分。您可以尝试不同的参数值,观察搜索结果的变化,并根据实际情况进行调整。

Elasticsearch是一款流行的开源搜索引擎,广泛应用于信息检索、全文搜索、日志分析等领域。在Elasticsearch中,BM25是一种常用的文本相似度评分算法,用于计算查询和文档之间的相关性。本文将对BM25算法进行介绍,包括算法原理、使用场景、优缺点以及与其他算法的比较。

一、BM25算法简介

BM25算法(Best Matching 25)是一种基于统计学的文本相似度评分算法,用于计算查询和文档之间的相关性。BM25算法结合了向量空间模型(VSM)和概率检索模型(PRM)的优点,能够对文档进行更准确的评分。BM25算法在Elasticsearch中被广泛应用于搜索引擎、信息检索、全文搜索等领域。

二、BM25算法原理

BM25算法的核心思想是根据查询词项在文档中出现的频率和文档中的词汇分布来计算文档的相关性。具体来说,BM25算法将文档和查询表示为向量,然后计算两个向量之间的余弦相似度。BM25算法的公式如下:

其中, 表示查询, 表示文档, 表示查询中包含的词项数, 表示查询词项 在文档 中出现的频率, 是BM25算法的超参数, 表示文档 的长度, 表示所有文档的平均长度, 表示查询词项 的逆文档频率,定义如下:

其中, 表示文档总数, 表示包含查询词项 的文档数。

三、BM25算法优缺点

  1. 优点:

(1)BM25算法能够对文档进行更准确的评分,能够得到更好的搜索结果。

(2)BM25算法具有良好的可调节性,可以通过调整超参数 来适应不同的数据集和查询需求。

(3)BM25算法的计算速度较快,适用于大规模文本数据的处理。

  1. 缺点:

(1)BM25算法对于长文档和短查询的情况下,可能会出现评分偏低的问题。

(2)BM25算法没有考虑词项之间的关联性,可能会导致评分不准确的情况。

四、BM25算法应用场景

BM25算法适用于各种信息检索场景,包括搜索引擎、全文搜索、日志分析等。在Elasticsearch中,BM25算法被广泛用于文本搜索和相关性排序,能够实现快速、准确和可扩展的搜索功能。

五、BM25算法与其他算法的比较

  1. TF-IDF算法

TF-IDF算法是一种常用的文本相似度评分算法,用于计算查询和文档之间的相关性。与BM25算法相比,TF-IDF算法没有考虑文档长度和查询长度的影响,因此在处理长文档和短查询时可能会出现评分偏低的问题。但是TF-IDF算法计算速度较快,并且在处理短文本和长查询时表现较好。在Elasticsearch中,TF-IDF算法也被广泛应用于文本搜索和相关性排序。

  1. Okapi算法

Okapi算法是一种基于概率检索模型的文本相似度评分算法,与BM25算法类似。与BM25算法相比,Okapi算法考虑了词项之间的关联性,因此在处理长文档和短查询时具有优势。但是Okapi算法计算复杂度较高,因此在处理大规模文本数据时可能会出现性能问题。

六、结论

BM25算法是一种常用的文本相似度评分算法,能够对文档进行更准确的评分,适用于各种信息检索场景。BM25算法具有良好的可调节性和计算速度,但也存在一些缺点,例如在处理长文档和短查询时可能会出现评分偏低的问题。与其他算法相比,BM25算法具有自己的优劣势,需要根据具体场景选择合适的算法。在Elasticsearch中,BM25算法被广泛应用于搜索引擎、信息检索、全文搜索等领域,能够实现快速、准确和可扩展的搜索功能。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】多线程编程一(初识并发和多线程)

目录 一、并发和并行的概念 1.并发 2.并行 3.并发和并行的区别 二、并发的途径 多进程并发 多线程并发 三、C11相关多线程编程的头文件 一、并发和并行的概念 1.并发 并发:指同一时刻只能有一条指令执行,但是多个进程指令被快速地轮换执行&#…

C语言--文件操作

文章目录 前言文件文件名 文件的打开和关闭文件指针文件的打开和关闭 文件的顺序读写fgetc、fputcfgets、fputsfprintf、fsanffread、fwrite 文件的随机读写fseekftellrewind 文本文件和二进制文件文件读取结束的判定feof 文件缓冲区 前言 在我们写完一个程序之后,…

【数据结构】树二叉树的概念以及堆的详解

⭐️ 往期相关文章 ✨链接1:【数据结构】顺序表 ✨链接2:【数据结构】单链表 ✨链接3:【数据结构】双向带头循环链表 ✨链接4:【数据结构】栈和队列 ⭐️ 树的概念 百度百科的解释:树是一种非线性的数据结构&#xf…

Jmeter四种关联方法讲解

目录 方法一,从前一个请求中取,用正则表达式提取器。 二、json path extractor 三、json extractor 四、XPath Extractor 方法一,从前一个请求中取,用正则表达式提取器。 具体方法,在需要获得数据的请求上右击添加…

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库

目录 1,新建工程前的准备工作(了解)1.1下载相关STM32Cube 官方固件包(F1/F4/F7/H7) 2,新建HAL库版本MDK工程步骤(熟悉)2.1新建工程文件夹2.1.1Drivers文件夹2.1.2Middlewares文件夹2…

基数排序(Radix_Sort)

基数排序 (Radix Sort)-20230715 前言 基数排序适用于多关键字排序,与前述的比较排序不同,实现基数排序不需要对关键字进行比较和移动。简而言之,基数排序是一类借助多关键字排序的思想对单逻辑关键字实现排序的方法。 多关键字排序 先看…

SwiftUI 原生或利用 Vision 检测限定高度的 Text 视图能否完整显示文本的方法

功能需求 在 SwiftUI 开发中,为了节省空间我们往往会为内容很长的文本视图(Text)限定一个高度,然后让用户决定是否展开显示其完整内容。 如上图所示,为了节省空间我们对 Text 视图高度做了限制,然后根据文本长度自动显示或隐藏展开按钮,用户点击该按钮即可展开显示完整…

FL Studio21入门版编曲 2023年免费小白新手编曲工具

全能数字音乐工作站(DAW)编曲、剪辑、录音、混音,有了它就能把你的笔记本电脑变成全功能音乐工作室。 内置丰富插件,满足不同风格创作拥有强大的采样引擎,自带高品质打击乐、钢琴、弦乐、吉他等107种乐器效果。 流行…

C++-把字符串转换成整数

题目来源:牛客网 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0 数据范围:字符串长度满足 0≤n≤100 进阶:空间复杂度 O(1) O(1) &…

Mybatis执行SQL过程

文章目录 1. 相关代码2. 创建SqlSession3. 创建Mapper代理对象4.sql的执行4.1 MapperProxy.invoke()4.2 mapperMethod.execute()4.3 sqlSession.selectOne4.4 CachingExecutor.query()4.5 BaseExecutor.query方法4.6 SimpleExecutor.doQuery方法 1. 相关代码 Testpublic void …

其他形式转欧拉角形式

1. 坐标系轴方向问题 3D数学基础中约定使用左手坐标系 左手坐标系 右手坐标系 左手正方向:x正向右平移,y向上平移,z向前平移. 右手正方向:x正向左平移&#xff0…

漫谈大数据时代的个人信息安全(二)——“逢脸造戏”

大数据时代的个人信息安全系列二:“逢脸造戏” 1. 逢脸造戏2. 生物识别信息安全2.1 生物识别信息被大量获取2.2 生物识别信息被非法滥用 3. 各国加强对深度合成监管4. 个人信息保护小贴士 互联网就像公路,用户使用它,就会留下脚印。 每个人都…

文件IO_复制文件描述符(附Linux-5.15.10内核源码分析)

目录 1.文件描述符复制简介 2.dup函数原型 2.1 dup函数 2.2 dup函数工作原理 2.3 dup函数内核源码分析 2.4 dup函数示例代码 3.dup2函数原型 3.1 dup2函数 3.2 dup2函数工作原理 3.3 dup2函数内核源码分析 3.4 dup2函数示例代码 4.dup3函数原型 4.1 dup3函数 4.2…

rv1126人脸识别的相关操作

目录 一、代码的改写Makeflierkmedia_rockx_face_insert.cpprkmedia_rockx_face_rga_rtsp_main.cpprkmedia_rockx_face_two_rkisp_rtsp_main.cppsqlite3_operation.cpp二、在ubuntu上交叉编译三、板子上的相关操作一、代码的改写 Makeflie 修改交叉编译工具链 rkmedia_rockx_fa…

2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷5

第一题 题目:输入一个整数n,计算其各位上数字之和,并用汉语写出每一位数字并输出。 【输入格式】一个整数 【输出格式】再一行内输出数字之和的每一位对应的汉字 【输入样例】1234 【输出样例】一零 第二题 题目:小溪使用 Excel 将任意 2 组数字中相同的数按照从小到…

终于有人把软件测试用例讲清楚了(一定要收藏)

目录 1:公司流程 1.1. 测试用例的4个特性 1.1. 测试用例通常包括以下几个组成元素: 1. 编写测试用例的基本方法 1.1.1. 概念 1.1.1. 示例 1.1练习案例: 1.1. 边界值法 1.1.1. 确定边界值的方法() 1.1. 因果图法 1.1.1.…

keil5软件仿真stm32设置 和 调试技巧

keil5软件仿真stm32设置 和 调试技巧 文章目录 keil5软件仿真stm32设置 和 调试技巧前言一、设置二、调试1.串口显示 总结 前言 不想用板子的时候或没有板子的时候,软件仿真更方便调试快速验证; 提示:以下是本篇文章正文内容,下面…

LeetCode 周赛上分之旅 #33 摩尔投票派上用场

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难…

【简单认识MySQL数据库存储引擎】

文章目录 一、存储引擎概念介绍二、MyISAM存储引擎1.特点详解2.适用生产环境 三、InnoDB存储引擎1.特点详解2.适用生产环境 四、数据库存储引擎操作1.查看数据库支持的存储引擎2.查看数据库存储引擎3.修改数据库表的存储引擎 五、行锁和表锁1.InnoDB使用行锁和表锁的场景2.行锁…

Flink复习笔记

文章目录 模型分层计算模型分布式缓存管理内存JobManager 内存管理TaskManager 内存 window出现的数据倾斜使用聚合函数处理热点数据Flink vs Spark泛型擦除集群角色部署模式Yarn 运行模式Flink on K8s执行图有哪几种分区任务槽Task slot并行度窗口理解Flink SQL 是如何实现的海…