Elasticsearch-01-文本检索算法

python实现文本检索-文本相似度算法 目的 给定一个或多个搜索词,如“高血压 患者”,从已有的若干篇文本中找出最相关的(n篇)文本。 理论知识 文本检索(text retrieve)的常用策略是:用一个ranking function根据搜索词对所有文本进行排序,选取前n个,就像百度搜索一样。 算法:模型选择 1、基于word2vec的词语相似度计算模型 2、python的实现用到了gensim库 3... 阅读详情

Elasticsearch-01-文本检索算法详解

概述

Elasticsearch作为强大的搜索和分析引擎,提供了多种文本检索算法来满足不同的搜索需求。本文档将详细介绍两种核心的文本检索算法:TF-IDF和BM25。

1. TF-IDF算法

基本原理

TF-IDF(Term Frequency-Inverse Document Frequency)是一种统计方法,用于评估一个词在文档或语料库中的重要程度。TF-IDF值与一个词在文档中出现的次数成正比,与该词在整个文档集合中出现的频率成反比。

计算公式

TF(词频):词在文档中出现的频率

TF(t, d) = (词t在文档d中出现的次数) / (文档d中的总词数)

IDF(逆文档频率):衡量词的重要性

IDF(t) = log(文档总数 / 包含词t的文档数 + 1)

TF-IDF得分:

TF-IDF(t, d) = TF(t, d) × IDF(t)

工作机制

  1. 索引阶段:计算每个文档中每个词的TF-IDF值
  2. 查询阶段:计算查询词与文档的相似度得分
  3. 排序阶段:根据得分对文档进行排序

优点

  • 简单直观,易于理解和实现
  • 对常见词(如"the"、“is”)进行降权
  • 适用于传统信息检索场景

缺点

  • 无法处理同义词和语义相似性
  • 对文档长度敏感
  • 无法处理词序信息

2. BM25算法

基本原理

BM25(Best Matching 25)是TF-IDF的改进版本,是Elasticsearch默认使用的文本检索算法。它通过引入饱和函数和文档长度归一化来改进TF-IDF的性能。

计算公式

BM25的得分计算公式:

score(d, q) = Σ (IDF(t) × (f(t, d) × (k1 + 1)) / (f(t, d) + k1 × (1 - b + b × (|d| / avgdl))))

其中:

  • f(t, d):词t在文档d中的频率
  • |d|:文档d的长度
  • avgdl:平均文档长度
  • k1:控制词频饱和的参数(通常为1.2-2.0)
  • b:控制文档长度归一化的参数(通常为0.75)

关键改进

  1. 饱和函数:防止高频词过度影响得分
  2. 文档长度归一化:考虑文档长度对相关性的影响
  3. 参数可调:可以通过调整k1和b参数优化搜索效果

优点

  • 对文档长度不敏感
  • 对高频词有更好的控制
  • 在大多数场景下表现优于TF-IDF
  • Elasticsearch默认使用,无需额外配置

缺点

  • 参数调优相对复杂
  • 对于非常短的查询可能效果不佳

3. 算法对比

特性TF-IDFBM25
文档长度敏感性高低
高频词处理简单线性增长饱和函数控制
参数调优简单相对复杂
默认使用否是(Elasticsearch)
适用场景传统信息检索现代搜索引擎

4. 在Elasticsearch中的使用

默认配置

Elasticsearch默认使用BM25算法:

{
  "settings": {
    "index": {
      "similarity": {
        "default": {
          "type": "BM25"
        }
      }
    }
  }
}

自定义配置

可以调整BM25参数:

{
  "settings": {
    "index": {
      "similarity": {
        "my_bm25": {
          "type": "BM25",
          "k1": 1.5,
          "b": 0.75
        }
      }
    }
  }
}

5. 最佳实践

  1. 对于大多数场景:使用默认BM25算法
  2. 短文本搜索:考虑调整k1参数
  3. 长文档搜索:调整b参数控制文档长度影响
  4. 性能优化:合理设置分片数量和文档大小

6. 总结

BM25算法通过改进TF-IDF,提供了更好的文本检索性能,特别是在处理不同长度文档和抑制高频词方面。Elasticsearch默认使用BM25,使其成为现代搜索应用的理想选择。理解这两种算法的原理和差异,有助于根据具体需求选择合适的检索策略。

BMH文本搜索算法 全称:Boyer-Moore-Horspool算法 实现从text中搜索pattern,返回其最小出现的位置; 算法思想: 1. 搜索文本时,从后到前搜索; 2. 如果碰到不匹配时,移动pattern,重新与text进行匹配; 关键:移动位置的计算shift_table 阅读详情

相关推荐

文本与图像信息检索实战:从NER+ES到Faiss向量搜索

信息检索是让机器理解用户意图并精准匹配结果的核心技术,其本质是在离散符号空间(文本)或连续向量空间(图像)中实现语义对齐与几何聚类。文本检索依赖命名实体识别(NER)提取结构化槽位,并结合Elasticsearch的模糊匹配处理拼写错误与同义表达;图像检索则依托深度特征提取(如VGG16)生成鲁棒向量,再通过Faiss等近似最近邻(ANN)引擎实现毫秒级相似搜索。二者在原理、工具链与工程权衡上截然不同——前者强调可解释性与规则兜底,后者追求高维空间的高效聚类。本文聚焦真实业务场景中的自动订单提取与以图搜图两

weixin_30691871的博客 429

数据结构-文本文件检索

一、问题重述: 要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写,统计给定单词在文本文件中出现的总次数,检索输出的某个单词出现在文本中的行号、在该行中出现的次数以及位置。 该设计要求可分三个部分实现:其一,建立文本文件,文件名由用户键盘输入; 其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号,该行中出现的次数以及在该行中的相应位 置...

m0_46633875的博客 1598

NLP | 搜索文本的匹配算法

搜索即找到跟搜索词句很相似的文本,例如在百度中搜索"人的名",结果如下 那么怎么评价两个文本之间的相似度呢? 余弦相似度 (cosine similiarity) 本文介绍基于VSM(Vector Space Model) 的余弦相似度算法来评价两个文本间的相识度。 余弦相似度,又称为余弦相似性。通过计算两个向量的夹角余弦值来评估他们的相似度。 两个空间向量之间的夹角越小,我们就认为这两个向量越吻合,cosθ 越大,当完全重合时 cosθ = 1 由余弦定律可知:(原谅我百...

4677

自然语言处理中的文本检索:算法与实践

1.背景介绍 自然语言处理(NLP)是人工智能的一个重要分支,其中文本检索(Text Retrieval)是一个经典的NLP任务。文本检索的目标是在大量文本数据中快速找到与给定查询最相关的文档。这个问题在现实生活中非常常见,例如搜索引擎、文本消息过滤、文本摘要生成等。 在本文中,我们将深入探讨文本检索的核心概念、算法原理和实践。我们将从以下六个方面进行讨论: 背景介绍 核心概念与联系 核心...

AI天才研究院 2095

Elasticsearch三大示例数据实战解析:logs、莎士比亚文本与用户账户分析

Elasticsearch 是一个分布式的开源搜索与分析引擎,基于 Apache Lucene 构建,具备近实时(NRT)的数据检索能力。其数据以 JSON 文档形式存储,通过倒排索引实现高效全文检索。每个文档属于一个索引(Index),类似数据库中的“表”,而集群由多个节点组成,支持水平扩展。在Elasticsearch中,索引是存储和检索数据的基本容器。针对logs.json这类高频写入、低频更新的日志数据,应通过显式的PUT请求创建专用索引,明确设置其存储结构与行为特性。

weixin_42356162的博客 708

文本单词检索算法

这是我用c语言写的程序,用到的是数据结构里的串的知识。用到了串的匹配,串的查找等算法。我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有数据结构,window编程。我也在学c语言,每当我写完一个程序,我都会免费发上来。

ES已死,文本检索永生

长期以来,混合查询(Hybrid Search)一直是提升 RAG(Retrieval-Augmented Generation)搜索质量的重要手段。尽管基于密集向量(Dense Embedding)的搜索技术随着模型规模和预训练数据集的不断扩展,在构建 query 和文档之间的深层次语义交互方面展现出令人瞩目的性能,但其仍存在一些显著局限性,例如可解释性不足,以及在处理长尾查询(long-tai...

ZILLIZ 1156

java文本搜索算法

java文本搜索算法 可是实现JAVA文本里的关键字搜索 而不是简单的使用java提供的方法

Elasticsearch的大数据处理与分析

1.背景介绍 1. 背景介绍 Elasticsearch是一个开源的搜索和分析引擎,基于Lucene库构建。它具有高性能、可扩展性和实时性等优势,适用于大数据处理和分析场景。Elasticsearch可以处理结构化和非结构化数据,支持多种数据源和格式,如JSON、XML、CSV等。 Elasticsearch的核心功能包括搜索、分析、聚合和监控等。它支持全文搜索、范围查询、模糊查询等多种查询...

AI天才研究院 1154

文本文件字符串的检索和计数(KMP算法)

该程序主要功能可分为 1.为用户在本地建立一个文本文件,并且支持录入换行功能,字符序列构成且区分大小写 2.统计给定单词在文本文件中出现的次数 3.检索输出某个单词某个单词出现在文本中的行号、在改行中出现的次数以及位置。

AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1553

腾讯云 ES:一站式 RAG 方案,开启智能搜索新时代

点击蓝字⬆ 关注我们本文共计8085 预计阅读时长25分钟导读在大型语言模型(LLM)引领的革命浪潮中,搜索与大模型的紧密结合已成为推动知识进步的关键要素。作为开源搜索引擎排名第一的 Elasticsearch(ES),结合沉淀多年的文本搜索能力和强大的向量检索能力实现混合搜索,使搜索变得更准、更全、更智能。腾讯云 ES 多年来持续对开源 ES 的性能、成本、稳定性以及分布式架构进行深度增强优化,...

cloudbigdata的博客 1082

第二十届全国大学生智能车竞赛-地瓜机器人智慧医疗挑战赛技术解析与实战指南

本文深入解析了第二十届全国大学生智能车竞赛-地瓜机器人智慧医疗挑战赛的核心技术。内容涵盖从零搭建数字孪生环境、实现AI视觉任务(二维码识别、引导线追踪、目标检测)、在边缘设备部署轻量化大模型进行图生文描述,到遥操作与自主控制的平滑切换,并提供了基于ROS2的系统集成与赛场实战指南,助力参赛者高效备赛。

weixin_29252171的博客 2777

倒排索引的一些算法调研

下面的文章专门针对搜索引擎里的倒排列表 sorted sets研究交集算法,思路类似快排,非常值得一看 www.cs.ucr.edu/~stelo/cpm/cpm04/25_Baeza-yates.pdf 合并sorted sequence算法: https://github.com/rklaehn/rklaehn.github.io/blob/master/_posts...

djph26741的博客 216

DPARSF高级版 vs 基础版怎么选?没有T1数据也能做fMRI分析吗?

本文深度对比了DPARSF高级版与基础版在fMRI分析中的核心差异与适用场景,特别针对无T1数据的情况提供了实战解决方案。高级版依赖T1像实现高精度配准,适合需要精确解剖定位的研究;基础版则无需T1数据,适用于功能连接等相对空间要求不高的分析。文章还提供了版本选择决策树和常见问题解决方案,帮助研究者根据实际需求做出最优选择。

weixin_42526087的博客 132

从EXIF到测绘:解码大疆影像元数据的实战应用指南

本文深入解析了大疆无人机影像元数据的实战价值,重点阐述了如何利用EXIF和XMP中的GPS、RTK、姿态角及相机内参等关键信息,提升测绘、三维重建及精准农业等项目的成果精度与效率。通过自动化质检脚本与行业应用场景剖析,指导从业者将元数据从信息转化为生产力,实现从拍照到专业测绘的跨越。

dell8的博客 527

ElasticSearch的应用案例:文化和艺术

1.背景介绍 1. 背景介绍 ElasticSearch是一个开源的搜索和分析引擎,基于Lucene库构建,具有高性能、可扩展性和实时性等优势。它广泛应用于企业级搜索、日志分析、监控、数据挖掘等领域。在文化和艺术领域,ElasticSearch也有着广泛的应用,例如艺术品搜索、文化活动推荐、艺术品评价等。本文将从以下几个方面深入探讨ElasticSearch在文化和艺术领域的应用: 核心概...

AI天才研究院 324

ic后端学习笔记-floorplan

floorplan是布图规划,规划包括定义芯片的大小,定义芯片内各种模块、hard macros(硬核。比如RAM,ROM及其他IP模块等)、IO等的大小和位置,有时候还需要提前定义一些placement blockages,groups/regions等等,是后端设计的第一步,也是后续所有P&R工作的基础。floorplan与placement的区别是。

tfrofc的博客 5831

01 搜索技术的发展史

文章目录1 搜索技术的发展历史2 五大阶段3 两大分类 1 搜索技术的发展历史 搜索引擎的发展经历了5个阶段和两大分类。 五个阶段: FTP文件检索阶段 分类目录导航阶段 文本相关性检索阶段 网页链接分析阶段 用户意图识别阶段 两大分类: 站内搜索 站外搜索 2 五大阶段 FTP文件检索阶段 该阶段搜索引擎只检索多个FTP服务器存储的文件,比如:Archie。用户搜索文件时需要输入精确的文件名来进行搜索查找,搜索引擎会告诉用户从哪一个FTP地址可以下载需要的文件 分类目录导航阶段 该阶段搜索

wyaoyao93的博客 1794

【RT-DETR涨点改进】损失函数改进篇 | RT-DETR引入SlideLoss损失函数,适合目标检测中面临的尺度变化、遮挡以及难易样本不平衡等复杂场景下的检测任务,含详细使用步骤

本文提出在RT-DETR目标检测模型中引入SlideLoss损失函数,以解决尺度变化、遮挡和难易样本不平衡等问题。SlideLoss通过自适应阈值划分正负样本,并对难样本赋予更高权重,使模型更关注分类边界样本。文章详细展示了SlideLoss的核心代码实现,并逐步指导如何在RT-DETR框架中集成该损失函数。实验表明,该方法能有效提升模型性能,特别适用于复杂场景下的目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 265

FPGA入门200例(17):如何阅读RTL原理图(Schematic)?将Verilog代码与门级电路对应

本文针对FPGA开发新手常见误区,重点讲解了RTL原理图的重要性和阅读方法。文章指出,仅通过仿真验证代码会导致板级测试异常,而RTL原理图能直观呈现Verilog代码对应的硬件结构(门电路、寄存器、多路选择器等)。通过"识别基础元件→跟踪信号路径→验证逻辑关系"的三步法,新手可以建立代码与硬件的映射思维,排查冗余逻辑、意外锁存器等错误。文章还结合Vivado/Quartus工具操作指南和典型代码案例,帮助读者掌握从代码到硬件实现的转换过程,避免混淆RTL与门级原理图、忽略信号位宽等常见误

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 200

毕设分享 基于Python实现的新闻搜索引擎(源码+论文)

毕设分享 基于Python实现的新闻搜索引擎(源码+论文)

m0_12378的博客 459

优化相机姿态和三维点云的Bundle Adjustment算法及其编程实现

重投影误差是指将优化后的相机姿态和三维点云投影到图像平面上,与对应的图像特征点之间的距离。Bundle Adjustment(捆绑调整)是一种用于同时优化相机姿态和三维点云的算法,它可以提高三维重建和相机定位的精度。下面是一个简单的Python示例代码,演示了如何使用Bundle Adjustment算法优化相机姿态和三维点云的参数。通过以上步骤,Bundle Adjustment算法可以不断地优化相机姿态和三维点云的参数,从而提高重建和定位的精度。Bundle Adjustment算法的编程实现。

CyberXZ的博客 741

PageRank算法--从原理到实现

PageRank 算法标签: PageRank Markov MapReduce本文将介绍PageRank算法的相关内容,具体如下:PageRank 算法 算法来源 算法原理 算法证明 PR值计算方法 1 幂迭代法 2 特征值法 3 代数法 算法实现 1 基于迭代法的简单实现 2 MapReduce实现 PageRank算法的缺点 写在最后 参考资料1. 算法来源这个要从搜索引擎的发展讲起。最早的搜

rubinorth的博客 5万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Elasticsearch基本数据结构

1.背景介绍 1. 背景介绍 Elasticsearch是一个分布式、实时的搜索和分析引擎,基于Lucene库开发。它可以快速、高效地存储、检索和分析大量数据。Elasticsearch的核心数据结构包括文档、索引和类型等。在本文中,我们将深入探讨Elasticsearch的基本数据结构,揭示其核心概念和联系,并提供实际应用场景和最佳实践。 2. 核心概念与联系 2.1 文档 文档是El...

AI天才研究院 367

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Text2SQL-03-开源框架Vanna
下一篇: Elasticsearch-02-向量相似度算法
d3y1
博客等级 码龄12年 1438粉丝 2782原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值